IL-GSC/AW/PC/maps/_breach.gsc
InfinityLoader b2389dbcb9 Full AW Dump
2024-04-22 02:38:24 -04:00

742 lines
16 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: _breach.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 24
* Decompile Time: 341 ms
* Timestamp: 4/22/2024 2:20:07 AM
*******************************************************************/
//Function Number: 1
main()
{
level._effect["_breach_doorbreach_detpack"] = loadfx("fx/explosions/exp_pack_doorbreach");
level._effect["_breach_doorbreach_kick"] = loadfx("fx/dust/door_kick");
level.scr_sound["breach_wooden_door"] = "";
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 = common_scripts\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 = [];
for(var_09 = 0;var_09 < var_0B.size;var_09++)
{
if(var_0B[var_09] istouching(self))
{
var_0C[var_0C.size] = var_0B[var_09];
}
}
if(var_0C.size > 0)
{
common_scripts\utility::array_thread(var_0C,::breach_enemies_stunned,self);
}
while(!self.aiareintheroom)
{
wait(0.05);
}
self notify("breach_complete");
if(!var_0C.size)
{
return;
}
while(!self.cleared)
{
wait(0.05);
for(var_09 = 0;var_09 < var_0C.size;var_09++)
{
if(!isalive(var_0C[var_09]))
{
var_0C = common_scripts\utility::array_remove(var_0C,var_0C[var_09]);
}
if(var_0C.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::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.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\_exploder::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\_exploder::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;
}