Files
IL-GSC/MW3/PC/SP/maps/_mortar.gsc
InfinityLoader d559c1d414 Added MW3 Scripts
2023-10-27 03:47:01 -04:00

1645 lines
31 KiB
Plaintext

/*******************************************************************
* 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;
}
}