// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool 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"] = "detpack_explo_main"; level.scr_sound["breach_wood_door_kick"] = "wood_door_kick"; common_scripts\utility::flag_init( "begin_the_breach" ); } breach_think( var_0, var_1, var_2, var_3, var_4, var_5 ) { self endon( "breach_abort" ); if ( isdefined( var_5 ) && var_5 == 0 ) anim.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_6 = getentarray( self.targetname, "targetname" ); var_7 = self.targetname; self.sbadplacename = "badplace_" + var_7; self.badplace = getent( "badplace_" + var_7, "targetname" ); if ( isdefined( self.badplace ) ) { } self.breachtrigger = getent( "trigger_" + var_7, "targetname" ); if ( !isdefined( var_4 ) ) var_4 = 1; if ( isdefined( self.breachtrigger ) ) { switch ( self.breachtrigger.classname ) { case "trigger_use": self.triggerhintstring = var_2; break; case "trigger_use_touch": self.triggerhintstring = var_2; break; case "trigger_radius": break; case "trigger_multiple": break; default: break; } } switch ( var_1 ) { 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_7, "targetname" ); self.grenadedest = getent( self.grenadeorigin.target, "targetname" ); } thread breach_abort( var_0 ); thread breach_cleanup( var_0 ); thread breach_play_fx( var_1, var_4 ); var_8 = 0; for ( var_9 = 0; var_9 < var_0.size; var_9++ ) { if ( isdefined( var_0[var_9].firstbreacher ) ) { var_8++; self.closestai = var_0[var_9]; } } if ( var_8 > 0 ) { } else self.closestai = common_scripts\utility::getclosest( self.animent.origin, var_0 ); if ( var_0.size == 1 ) self.singlebreacher = 1; for ( var_9 = 0; var_9 < var_0.size; var_9++ ) var_0[var_9] thread breacher_think( self, var_1, var_5 ); while ( self.breachers < var_0.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( var_3 ) && var_3 == 1 ) { var_10 = getentarray( "hostiles_" + var_7, "targetname" ); self waittill( "spawn_hostiles" ); spawnbreachhostiles( var_10 ); self.hostilesspawned = 1; } if ( isdefined( self.badplace ) ) badplace_cylinder( self.sbadplacename, -1, self.badplace.origin, self.badplace.radius, 200, "bad_guys" ); var_11 = getaiarray( "bad_guys" ); var_12 = []; for ( var_9 = 0; var_9 < var_11.size; var_9++ ) { if ( var_11[var_9] istouching( self ) ) var_12[var_12.size] = var_11[var_9]; } if ( var_12.size > 0 ) common_scripts\utility::array_thread( var_12, ::breach_enemies_stunned, self ); while ( !self.aiareintheroom ) wait 0.05; self notify( "breach_complete" ); if ( !var_12.size ) return; while ( !self.cleared ) { wait 0.05; for ( var_9 = 0; var_9 < var_12.size; var_9++ ) { if ( !isalive( var_12[var_9] ) ) var_12 = common_scripts\utility::array_remove( var_12, var_12[var_9] ); if ( var_12.size == 0 ) self.cleared = 1; } } } breach_dont_fire() { while ( self.breaching == 1 ) { self waittillmatch( "single anim", "fire" ); self.a.lastshoottime = gettime(); } } breacher_think( var_0, var_1, var_2 ) { self.breaching = 1; self.breachdonotfire = undefined; if ( !isdefined( var_2 ) ) var_2 = 1; self pushplayer( 1 ); thread give_infinite_ammo(); var_0 endon( "breach_abort" ); self.ender = "stop_idle_" + self getentitynumber(); var_3 = undefined; var_4 = undefined; var_5 = undefined; var_6 = undefined; var_7 = undefined; if ( self == var_0.closestai ) var_3 = "01"; else var_3 = "02"; if ( var_0.singlebreacher == 1 && var_1 == "explosive_breach_left" ) var_3 = "02"; switch ( var_1 ) { case "explosive_breach_left": if ( isdefined( self.usebreachapproach ) && self.usebreachapproach == 0 ) var_4 = "detcord_stack_left_start_no_approach_" + var_3; else var_4 = "detcord_stack_left_start_" + var_3; var_5 = "detcord_stack_leftidle_" + var_3; var_6 = "detcord_stack_leftbreach_" + var_3; break; case "shotgunhinges_breach_left": var_4 = "shotgunhinges_breach_left_stack_start_" + var_3; var_5 = "shotgunhinges_breach_left_stack_idle_" + var_3; var_6 = "shotgunhinges_breach_left_stack_breach_" + var_3; break; case "flash_breach_no_door_right": if ( var_0.singlebreacher == 1 ) { var_4 = "flash_stack_right_start_single"; var_5 = "flash_stack_right_idle_single"; var_6 = "flash_stack_right_breach_single"; var_7 = "flash_stack_right_flash_single"; } else { var_4 = "flash_stack_right_start_" + var_3; var_5 = "flash_stack_right_idle_" + var_3; var_6 = "flash_stack_right_breach_" + var_3; var_7 = "flash_stack_right_flash_" + var_3; } break; default: break; } breach_set_goaladius( 64 ); if ( !isdefined( self.usebreachapproach ) || self.usebreachapproach ) var_0.animent maps\_anim::anim_generic_reach( self, var_4 ); else { self.scriptedarrivalent = var_0.animent; var_0.animent maps\_anim::anim_generic_reach_and_arrive( self, var_4 ); } var_0.animent maps\_anim::anim_generic( self, var_4 ); var_0.animent thread maps\_anim::anim_generic_loop( self, var_5, self.ender ); self.setgoalpos = self.origin; var_0.breachers++; self.scriptedarrivalent = undefined; var_0 waittill( "execute_the_breach" ); if ( !var_0.flashthrown && isdefined( var_7 ) ) { var_0.animent notify( self.ender ); var_0.animent thread maps\_anim::anim_generic( self, var_7 ); wait 1; if ( var_3 == "02" || var_0.singlebreacher == 1 ) { var_8 = "J_Mid_LE_1"; self attach( "projectile_m84_flashbang_grenade", var_8 ); var_9 = self.grenadeweapon; self.grenadeweapon = "flash_grenade"; self.grenadeammo++; if ( var_3 == "02" ) self waittillmatch( "single anim", "grenade_throw" ); if ( var_0.singlebreacher == 1 && var_3 == "01" ) self waittillmatch( "single anim", "fire" ); self magicgrenade( var_0.grenadeorigin.origin, var_0.grenadedest.origin, level.iflashfuse ); self detach( "projectile_m84_flashbang_grenade", var_8 ); self.grenadeweapon = var_9; self.grenadeammo = 0; } self waittillmatch( "single anim", "end" ); var_0.animent thread maps\_anim::anim_generic_loop( self, var_5, self.ender ); wait 0.1; } var_0.animent notify( self.ender ); if ( var_2 == 0 ) self.breachdonotfire = 1; var_0.animent thread maps\_anim::anim_generic( self, var_6 ); if ( var_1 == "explosive_breach_left" ) { if ( var_3 == "02" ) { thread detcord_logic( var_0 ); self waittillmatch( "single anim", "pull fuse" ); wait 1; var_0 notify( "spawn_hostiles" ); var_0 notify( "detpack_about_to_blow" ); self waittillmatch( "single anim", "explosion" ); var_0 notify( "detpack_detonated" ); var_0.breached = 1; var_0.edoor thread door_open( "explosive", var_0 ); var_0 notify( "play_breach_fx" ); } } else if ( var_1 == "shotgunhinges_breach_left" ) { if ( var_3 == "01" ) { var_0 notify( "spawn_hostiles" ); self waittillmatch( "single anim", "kick" ); var_0.edoor thread door_open( "shotgun", var_0 ); var_0 notify( "play_breach_fx" ); } } else if ( var_1 == "flash_breach_no_door_right" ) { } self waittillmatch( "single anim", "end" ); self notify( "breach_complete" ); if ( var_2 == 0 ) self.breachdonotfire = undefined; if ( isdefined( level.friendly_breach_thread ) ) self thread [[ level.friendly_breach_thread ]]( var_0 ); var_0.aiareintheroom = 1; self pushplayer( 0 ); breach_reset_animname(); while ( !var_0.cleared ) wait 0.05; self.breaching = 0; } breach_fire_straight() { if ( isdefined( self.breachdonotfire ) ) return; animscripts\notetracks::fire_straight(); } detcord_logic( var_0 ) { thread sound_effect_play( var_0 ); self waittillmatch( "single anim", "attach prop right" ); var_1 = "TAG_INHAND"; self attach( "weapon_detcord", var_1 ); self waittillmatch( "single anim", "detach prop right" ); var_2 = self gettagorigin( var_1 ); var_3 = self gettagangles( var_1 ); self detach( "weapon_detcord", var_1 ); var_4 = spawn( "script_model", var_2 ); var_4 setmodel( "weapon_detcord" ); var_4.angles = var_3; var_0 waittill( "detpack_detonated" ); radiusdamage( var_4.origin, 64, 50, 25 ); var_4 delete(); } sound_effect_play( var_0 ) { self waittillmatch( "single anim", "sound effect" ); thread common_scripts\utility::play_sound_in_space( "detpack_plant_arming", var_0.animent.origin ); } breach_enemies_stunned( var_0 ) { self endon( "death" ); var_0 endon( "breach_aborted" ); var_0 waittill( "detpack_detonated" ); if ( distance( self.origin, var_0.animent.origin ) <= level.detpackstunradius ) { level.stunnedanimnumber++; if ( level.stunnedanimnumber > 2 ) level.stunnedanimnumber = 1; var_1 = "exposed_flashbang_v" + level.stunnedanimnumber; self.allowdeath = 1; maps\_anim::anim_generic_custom_animmode( self, "gravity", var_1 ); breach_reset_animname(); } } breach_trigger_think( var_0 ) { var_0 endon( "execute_the_breach" ); var_0 endon( "breach_aborted" ); thread breach_trigger_cleanup( var_0 ); self waittill( "trigger" ); var_0 notify( "execute_the_breach" ); } breach_trigger_cleanup( var_0 ) { var_0 waittill( "execute_the_breach" ); common_scripts\utility::trigger_off(); if ( isdefined( var_0.ebreachmodel ) ) var_0.ebreachmodel delete(); } breach_abort( var_0 ) { self endon( "breach_complete" ); self waittill( "breach_abort" ); self.cleared = 1; thread breach_cleanup( var_0 ); } breach_cleanup( var_0 ) { 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( var_0, ::breach_ai_reset, self ); } breach_ai_reset( var_0 ) { self endon( "death" ); breach_reset_animname(); breach_reset_goaladius(); var_0.animent notify( self.ender ); self notify( "stop_infinite_ammo" ); self pushplayer( 0 ); } breach_play_fx( var_0, var_1 ) { self endon( "breach_aborted" ); self endon( "breach_complete" ); switch ( var_0 ) { 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 ( var_1 ) 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 ( var_1 ) playfx( level._effect["_breach_doorbreach_kick"], self.eexploderorigin.origin, anglestoforward( self.eexploderorigin.angles ) ); break; case "flash_breach_no_door_right": break; default: break; } } spawnhostile( var_0 ) { var_1 = var_0 dospawn(); maps\_utility::spawn_failed( var_1 ); return var_1; } spawnbreachhostiles( var_0 ) { var_1 = []; for ( var_2 = 0; var_2 < var_0.size; var_2++ ) { var_3 = spawnhostile( var_0[var_2] ); var_1[var_1.size] = var_3; } return var_1; } 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; } } door_open( var_0, var_1, var_2 ) { if ( !isdefined( var_2 ) ) var_2 = 1; if ( var_2 == 1 ) self playsound( level.scr_sound["breach_wood_door_kick"] ); switch ( var_0 ) { case "explosive": thread door_fall_over( var_1.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( var_1.animent ); door_connectpaths(); self playsound( level.scr_sound["breach_wooden_door"] ); break; } } door_connectpaths() { if ( self.classname == "script_brushmodel" ) self connectpaths(); else { var_0 = getent( self.target, "targetname" ); var_0 hide(); var_0 notsolid(); var_0 connectpaths(); } } door_fall_over( var_0 ) { var_1 = undefined; if ( self.classname == "script_model" ) var_1 = anglestoforward( self.angles ); else if ( self.classname == "script_brushmodel" ) var_1 = self.vector; else { } var_2 = ( var_1[0] * 20, var_1[1] * 20, var_1[2] * 20 ); self moveto( self.origin + var_2, 0.5, 0, 0.5 ); var_3 = spawn( "script_origin", ( 0, 0, 0 ) ); var_3.angles = var_0.angles; var_3.origin = ( self.origin[0], self.origin[1], var_0.origin[2] ); self linkto( var_3 ); var_3 rotatepitch( 90, 0.45, 0.4 ); wait 0.45; var_3 rotatepitch( -4, 0.2, 0, 0.2 ); wait 0.2; var_3 rotatepitch( 4, 0.15, 0.15 ); wait 0.15; self unlink(); var_3 delete(); } breach_set_goaladius( var_0 ) { if ( !isdefined( self.old_goalradius ) ) self.old_goalradius = self.goalradius; self.goalradius = var_0; } breach_reset_goaladius() { if ( isdefined( self.old_goalradius ) ) self.goalradius = self.old_goalradius; self.old_goalradius = undefined; } breach_set_animname( var_0 ) { if ( !isdefined( self.old_animname ) ) self.old_animname = self.animname; self.animname = var_0; } breach_reset_animname() { if ( isdefined( self.old_animname ) ) self.animname = self.old_animname; self.old_animname = undefined; }