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

1596 lines
36 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\_interactive_objects.gsc
* Game: Call of Duty: Modern Warfare Remastered
* Platform: PC
* Function Count: 46
* Decompile Time: 808 ms
* Timestamp: 10/27/2023 2:45:52 AM
*******************************************************************/
//Function Number: 1
main()
{
common_scripts\utility::flag_init("no_ai_tv_damage");
var_00 = 0;
var_01 = getentarray("explodable_barrel","targetname");
if(isdefined(var_01) && var_01.size > 0)
{
var_00 = 1;
}
var_01 = getentarray("explodable_barrel","script_noteworthy");
if(isdefined(var_01) && var_01.size > 0)
{
var_00 = 1;
}
if(var_00)
{
setbreakablesfx("barrel","explode","fx/props/barrelExp","explo_metal_barrel");
setbreakablesfx("barrel","burn_start","fx/props/barrel_ignite");
setbreakablesfx("barrel","burn","fx/props/barrel_fire_top","explo_metal_barrel_pre_fire");
}
var_02 = getentarray("oil_spill","targetname");
if(isdefined(var_02) && var_02.size > 0)
{
setbreakablesfx("oilspill","burn","fx/props/barrel_fire");
setbreakablesfx("oilspill","spark","fx/impacts/small_metalhit_1");
}
var_03 = getentarray("tincan","targetname");
if(isdefined(var_03) && var_03.size > 0)
{
setbreakablesfx("tincan",undefined,"fx/props/tincan_bounce");
}
var_04 = 0;
var_05 = getentarray("breakable","targetname");
if(isdefined(var_05) && var_05.size > 0)
{
var_04 = 1;
}
var_05 = getentarray("breakable_vase","targetname");
if(isdefined(var_05) && var_05.size > 0)
{
var_04 = 1;
}
var_05 = getentarray("breakable box","targetname");
if(isdefined(var_01) && var_01.size > 0)
{
var_04 = 1;
}
var_05 = getentarray("breakable box","script_noteworthy");
if(isdefined(var_01) && var_01.size > 0)
{
var_04 = 1;
}
if(var_04)
{
setbreakablesfx("vase",undefined,"fx/props/vase_water","bullet_large_vase");
setbreakablesfx("bottle",undefined,"fx/props/wine_bottle","bullet_small_bottle");
setbreakablesfx("box",0,"fx/props/crateExp_dust","bullet_large_crate");
setbreakablesfx("box",1,"fx/props/crateExp_dust","bullet_large_crate");
setbreakablesfx("box",2,"fx/props/crateExp_dust","bullet_large_crate");
setbreakablesfx("box",3,"fx/props/crateExp_ammo","bullet_large_crate");
}
var_06 = getentarray("glass","targetname");
var_06 = common_scripts\utility::array_combine(var_06,getentarray("glass","script_noteworthy"));
if(isdefined(var_06) && var_06.size > 0)
{
level._glass_info = [];
level._glass_info["glass_large"]["breakfx"] = loadfx("fx/props/car_glass_large");
level._glass_info["glass_large"]["breaksnd"] = "veh_glass_break_large";
level._glass_info["glass_med"]["breakfx"] = loadfx("fx/props/car_glass_med");
level._glass_info["glass_med"]["breaksnd"] = "veh_glass_break_small";
level._glass_info["glass_small"]["breakfx"] = loadfx("fx/props/car_glass_headlight");
level._glass_info["glass_small"]["breaksnd"] = "veh_glass_break_small";
}
var_07 = getentarray("interactive_tv","targetname");
if(isdefined(var_07) && var_07.size > 0)
{
precachemodel("com_tv2_d");
precachemodel("com_tv1");
precachemodel("com_tv1_d");
precachemodel("com_tv2");
precachemodel("com_tv1_testpattern");
precachemodel("com_tv2_testpattern");
setbreakablesfx("tv_explode",undefined,"fx/explosions/tv_explosion","tv_shot_burst");
level.tv_lite_array = getentarray("interactive_tv_light","targetname");
}
var_08 = getentarray("destroyable_security_camera","script_noteworthy");
if(isdefined(var_08) && var_08.size > 0)
{
precachemodel("com_security_camera");
precachemodel("com_security_camera_destroyed");
setbreakablesfx("security_camera_explode",undefined,"fx/props/securitycamera_explosion","security_camera_sparks");
}
var_09 = 25;
level.breakables_peicescollide["orange vase"] = 1;
level.breakables_peicescollide["green vase"] = 1;
level.breakables_peicescollide["bottle"] = 1;
level.barrelhealth = 150;
level.precachemodeltype = [];
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._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);
common_scripts\utility::array_thread(getentarray("hanging_object","targetname"),::hanging_object_logic);
common_scripts\utility::array_thread(getentarray("platestack","targetname"),::destroy_platestack);
misc_rotate_fans();
}
//Function Number: 2
security_camera_logic()
{
self setcandamage(1);
var_00 = undefined;
switch(self.model)
{
case "com_security_camera":
break;
}
}
//Function Number: 3
tv_logic()
{
self setcandamage(1);
self.damagemodel = undefined;
self.offmodel = undefined;
if(issubstr(self.model,"1"))
{
self.offmodel = "com_tv1";
self.onmodel = "com_tv1_testpattern";
self.damagemodel = "com_tv1_d";
}
else if(issubstr(self.model,"2"))
{
self.damagemodel = "com_tv2_d";
self.offmodel = "com_tv2";
self.onmodel = "com_tv2_testpattern";
}
if(isdefined(self.target))
{
self.usetrig = getent(self.target,"targetname");
self.usetrig usetriggerrequirelookat();
self.usetrig setcursorhint("HINT_NOICON");
}
if(!isdefined(self.script_noteworthy) || self.script_noteworthy != "nolite")
{
var_00 = common_scripts\utility::get_array_of_closest(self.origin,level.tv_lite_array,undefined,undefined,64);
if(var_00.size)
{
self.lite = var_00[0];
level.tv_lite_array = common_scripts\utility::array_remove(level.tv_lite_array,self.lite);
self.liteintensity = self.lite getlightintensity();
self.lite.tv = self;
}
}
thread tv_damage();
if(isdefined(self.target))
{
thread tv_off();
}
}
//Function Number: 4
tv_off()
{
self.usetrig endon("death");
for(;;)
{
wait(0.2);
self.usetrig waittill("trigger");
thread maps\_utility::play_sound_on_tag_endon_death("scn_tv_trigger_on_off");
self notify("off");
if(is_tv_off())
{
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(var_01 != level.player)
{
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");
if(isdefined(level.breakables_sfx["tv_explode"]))
{
thread maps\_utility::play_sound_on_tag(level.breakables_sfx["tv_explode"],"tag_fx");
}
if(isdefined(self.usetrig))
{
self.usetrig delete();
}
}
//Function Number: 6
is_tv_on()
{
return self.model == self.onmodel;
}
//Function Number: 7
is_tv_off()
{
return self.model == self.offmodel;
}
//Function Number: 8
is_tv_damaged()
{
return self.model == self.damagemodel;
}
//Function Number: 9
is_tv_emitting_light()
{
return is_tv_on();
}
//Function Number: 10
destroy_platestack()
{
setbreakablesfx("platestack_shatter",undefined,self.script_parameters);
self setcandamage(1);
var_00 = getentarray(self.target,"targetname");
for(;;)
{
self waittill("damage",var_01,var_02,var_03,var_04,var_05);
if(var_05 != "MOD_MELEE" && var_05 != "MOD_IMPACT")
{
playfx(level.breakables_fx["platestack_shatter"],self.origin);
foreach(var_07 in var_00)
{
var_07 delete();
}
self delete();
}
wait(0.01);
}
}
//Function Number: 11
hanging_object_logic()
{
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")
{
self physicslaunchclient(self.origin,(0,0,0));
break;
}
wait(0.01);
}
}
//Function Number: 12
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;
}
}
//Function Number: 13
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: 14
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);
var_00 = undefined;
for(;;)
{
self waittill("damage",var_01,var_02,var_03,var_04,var_05);
if(var_05 == "MOD_MELEE" || var_05 == "MOD_IMPACT")
{
continue;
}
self.damageowner = var_02;
playfx(level.breakables_fx["oilspill"]["spark"],var_04,var_03);
var_00 = spawn("script_origin",var_04);
if(isdefined(level.breakables_sfx["oilspill"]["spark"]))
{
var_00 thread maps\_utility::play_sound_on_tag_endon_death(level.breakables_sfx["oilspill"]["spark"]);
}
var_04 = pointonsegmentnearesttopoint(self.start.origin,self.end.origin,var_04);
thread oil_spill_burn_section(var_04);
thread oil_spill_burn(var_04,self.start.origin);
thread oil_spill_burn(var_04,self.end.origin);
break;
}
if(isdefined(self.barrel))
{
self.barrel waittill("exploding");
}
if(isdefined(level.breakables_sfx["oilspill"]["spark"]))
{
var_00 method_854D(level.breakables_sfx["oilspill"]["spark"]);
}
self.extra delete();
self hide();
wait(10);
var_00 delete();
self delete();
}
//Function Number: 15
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: 16
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 = maps\_utility::vector_multiply(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 + maps\_utility::vector_multiply(var_07,randomfloatrange(-6,6));
thread oil_spill_burn_section(param_00);
var_0B++;
if(var_0B == 4)
{
badplace_cylinder("",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 + maps\_utility::vector_multiply(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: 17
oil_spill_burn_section(param_00)
{
var_01 = 0;
var_02 = 0;
playfx(level.breakables_fx["oilspill"]["burn"],param_00);
if(isdefined(level.breakables_sfx["oilspill"]["burn"]))
{
thread maps\_utility::play_loop_sound_on_tag(level.breakables_sfx["oilspill"]["burn"],undefined,1,1);
}
}
//Function Number: 18
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(;;)
{
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: 19
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 = maps\_utility::vector_multiply(var_02,44);
if(var_04 < 0.5)
{
var_05 = maps\_utility::vector_multiply(var_02,22) - (0,0,30);
var_06 = maps\_utility::vector_multiply(var_02,22) + (0,0,14);
}
var_07 = spawn("script_origin",self.origin + var_06);
while(self.damagetaken < level.barrelhealth)
{
if(!var_01)
{
playfx(level.breakables_fx["barrel"]["burn_start"],self.origin + var_05);
if(isdefined(level.breakables_sfx["barrel"]["burn_start"]))
{
thread maps\_utility::play_sound_on_tag_endon_death(level.breakables_sfx["barrel"]["burn_start"]);
}
var_01 = 1;
}
if(var_00 > 20)
{
var_00 = 0;
}
playfx(level.breakables_fx["barrel"]["burn"],self.origin + var_06);
if(isdefined(level.breakables_sfx["barrel"]["burn"]))
{
var_07 thread maps\_utility::play_loop_sound_on_tag(level.breakables_sfx["barrel"]["burn"],undefined,1,1);
}
if(var_00 == 0)
{
self.damagetaken = self.damagetaken + 10 + randomfloat(10);
badplace_cylinder("",1,self.origin,128,250);
}
var_00++;
wait(0.05);
}
var_07 stopsounds();
self stopsounds();
thread explodable_barrel_explode();
wait(1);
var_07 delete();
}
//Function Number: 20
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 + maps\_utility::vector_multiply(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);
playfx(level.breakables_fx["barrel"]["explode"],self.origin + var_03);
if(isdefined(level.breakables_sfx["barrel"]["explode"]))
{
thread maps\_utility::play_sound_on_tag_endon_death(level.breakables_sfx["barrel"]["explode"]);
}
physicsexplosionsphere(self.origin + var_03,100,80,1);
level.barrelexplodingthisframe = 1;
if(isdefined(self.remove))
{
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);
}
}
level.lastexplodingbarrel["time"] = gettime();
level.lastexplodingbarrel["origin"] = self.origin + (0,0,30);
level.lastexplodingbarrel["radius"] = 350;
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 + maps\_utility::vector_multiply(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: 21
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: 22
tincan_think()
{
if(self.classname != "script_model")
{
return;
}
self setcandamage(1);
self waittill("damage",var_00,var_01);
if(issentient(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 = common_scripts\utility::vectorscale(var_03,0.5 + randomfloat(1));
self notify("death");
playfx(level.breakables_fx["tincan"],self.origin,var_03);
if(isdefined(level.breakables_sfx["tincan"]))
{
thread common_scripts\utility::play_sound_in_space(level.breakables_sfx["tincan"],self.origin);
}
self delete();
}
//Function Number: 23
helmet_pop()
{
if(self.classname != "script_model")
{
return;
}
xenon_auto_aim();
self setcandamage(1);
thread helmet_logic();
}
//Function Number: 24
helmet_logic()
{
self waittill("damage",var_00,var_01);
if(issentient(var_01))
{
var_02 = var_01 geteye();
}
else
{
var_02 = var_02.origin;
}
var_03 = vectornormalize(self.origin - var_02);
if(!isdefined(self.dontremove) && var_01 == level.player)
{
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.dontremove = 0;
self notify("ok_remove");
}
//Function Number: 25
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: 26
breakable_think_triggered(param_00)
{
for(;;)
{
self waittill("trigger",var_01);
param_00 notify("damage",100,var_01);
}
}
//Function Number: 27
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: 28
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":
break;
case "wood box":
break;
case "bottle":
break;
case "plate":
break;
}
}
//Function Number: 29
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 xenon_remove_auto_aim();
}
}
//Function Number: 30
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: 31
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: 32
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: 33
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: 34
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;
case "green vase":
break;
case "wood box":
break;
case "bottle":
break;
case "plate":
break;
default:
break;
}
}
//Function Number: 35
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: 36
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 = common_scripts\utility::vectorscale(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 = common_scripts\utility::vectorscale(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: 37
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: 38
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 = common_scripts\utility::vectorscale(var_0A,param_04 * var_09);
var_0B = common_scripts\utility::vectorscale(var_0B,param_03 * var_09);
var_0C = common_scripts\utility::vectorscale(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: 39
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: 40
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: 41
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: 42
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;
}
//Function Number: 43
setbreakablesfx(param_00,param_01,param_02,param_03)
{
if(isdefined(level.breakables_fx_override) && isdefined(level.breakables_fx_override[param_02]))
{
param_02 = level.breakables_fx_override[param_02];
}
if(isdefined(level.breakables_sfx_override) && isdefined(level.breakables_sfx_override[param_00]))
{
param_03 = level.breakables_sfx_override[param_00];
}
if(isdefined(param_01))
{
level.breakables_fx[param_00][param_01] = loadfx(param_02);
level.breakables_sfx[param_00][param_01] = param_03;
return;
}
level.breakables_fx[param_00] = loadfx(param_02);
level.breakables_sfx[param_00] = param_03;
}
//Function Number: 44
misc_rotate_fans()
{
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");
common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate_custom","targetname"),::fan_blade_rotate_custom);
}
//Function Number: 45
fan_blade_rotate(param_00)
{
if(!isdefined(self))
{
return;
}
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(randomfloatrange(0,1));
}
var_04 = self.angles;
var_05 = anglestoright(self.angles) * 100;
var_05 = vectornormalize(var_05);
if(isdefined(self.script_noteworthy) && self.script_noteworthy == "reverse")
{
var_01 = var_01 * -1;
}
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: 46
fan_blade_rotate_custom()
{
for(;;)
{
self addyaw(24);
wait(0.05);
}
}