// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool heroes_move( var_0 ) { level notify( "hero_move" ); level endon( "hero_move" ); thread move_to_goal( var_0 ); } move_to_goal( var_0, var_1, var_2 ) { if ( !isdefined( var_1 ) ) var_1 = "targetname"; if ( !isdefined( var_2 ) ) var_2 = "node"; var_3 = undefined; var_4 = undefined; switch ( var_2 ) { case "node": var_3 = getnodearray( var_0, var_1 ); var_4 = maps\_utility::set_goal_node; break; case "struct": var_3 = common_scripts\utility::getstructarray( var_0, var_1 ); var_4 = ::set_goal_pos_think; break; case "ent": var_3 = getentarray( var_0, var_1 ); var_4 = maps\_utility::set_goal_ent; break; } var_5 = []; if ( !isarray( self ) ) var_5[0] = self; else var_5 = self; foreach ( var_7 in var_5 ) { var_8 = undefined; foreach ( var_10 in var_3 ) { if ( var_10.script_noteworthy == var_7.script_noteworthy ) { var_8 = var_10; break; } } var_7 thread move_to_goal_think( var_4, var_8 ); } } move_to_goal_think( var_0, var_1 ) { self notify( "new_move_path" ); self endon( "new_move_path" ); self endon( "death" ); while ( isdefined( var_1 ) ) { var_1 maps\_utility::script_delay(); if ( self.type == "dog" ) dog_attackradius_check( var_1 ); self childthread [[ var_0 ]]( var_1 ); if ( isdefined( var_1.radius ) && var_1.radius != 0 ) self.goalradius = var_1.radius; if ( self.goalradius < 16 ) self.goalradius = 16; if ( isdefined( var_1.height ) && var_1.height != 0 ) self.goalheight = var_1.height; var_2 = self.goalradius; for (;;) { self waittill( "goal" ); if ( distance( var_1.origin, self.origin ) < var_2 + 10 ) break; } if ( !isdefined( var_1.target ) ) break; var_1 = var_1 common_scripts\utility::get_target_ent(); } } set_goal_pos_think( var_0 ) { childthread maps\_utility::set_goal_pos( var_0.origin ); } dog_attackradius_check( var_0 ) { if ( isdefined( var_0.script_parameters ) ) { var_1 = strtok( var_0.script_parameters, " " ); foreach ( var_3 in var_1 ) { if ( var_3 == "attack_radius" ) { self.dogattackradius = var_0.radius; self setdogattackradius( var_0.radius ); } } } } move_up_when_clear() { var_0 = common_scripts\utility::get_target_ent(); var_1 = var_0 common_scripts\utility::get_target_ent(); var_1 endon( "trigger" ); self waittill( "trigger" ); volume_waittill_no_axis( var_0.targetname, var_0.script_count, var_1 ); var_1 thread maps\_utility::activate_trigger(); if ( var_1 parameters_check( "move_up_delete" ) ) var_1 delete(); } volume_waittill_no_axis( var_0, var_1, var_2 ) { var_3 = common_scripts\utility::get_target_ent( var_0 ); for (;;) { if ( volume_is_empty( var_3, var_1 ) ) break; wait 0.2; } } volume_is_empty( var_0, var_1 ) { if ( !isdefined( var_1 ) ) var_1 = 0; var_2 = getaiarray( "axis" ); var_3 = 0; var_4 = 0; if ( var_0 parameters_check( "ignore_dying" ) ) var_4 = 1; foreach ( var_6 in var_2 ) { if ( var_6 istouching( var_0 ) ) { if ( var_4 == 1 ) { if ( var_6 maps\_utility::doinglongdeath() ) continue; } var_3 = var_3 + 1; if ( var_3 > var_1 ) return 0; } } return 1; } function_trigger_switch( var_0, var_1, var_2, var_3, var_4, var_5 ) { if ( isdefined( var_4 ) ) level endon( var_4 ); if ( isstring( var_0 ) ) var_0 = getent( var_0, "targetname" ); if ( isstring( var_1 ) ) var_1 = getent( var_1, "targetname" ); if ( isdefined( var_5 ) ) { childthread [[ var_2 ]](); var_1 waittill( "trigger" ); childthread [[ var_3 ]](); } for (;;) { var_0 waittill( "trigger" ); childthread [[ var_2 ]](); var_1 waittill( "trigger" ); childthread [[ var_3 ]](); } } set_follow_path_and_animate() { if ( maps\homecoming_drones::isdrone() ) { thread maps\homecoming_drones::drone_animate_on_path(); return; } var_0 = self.spawner; var_1 = var_0 get_linked_struct(); thread maps\_utility::follow_path_and_animate( var_1, 999999 ); disable_arrivals_and_exits(); } dog_spawn() { var_0 = getent( "dog_spawner", "targetname" ); var_1 = var_0 maps\_utility::spawn_ai(); var_1 maps\_utility::magic_bullet_shield(); var_1.name = "Riley"; var_1.ignoreme = 1; var_1.ignoresuppression = 1; var_1 setdogattackradius( 56 ); var_1 maps\_utility::set_moveplaybackrate( 0.8 ); var_1.goalradius = 56; var_1.animname = "dog"; return var_1; } alliesteletostartspot( var_0 ) { var_1 = common_scripts\utility::getstructarray( var_0, "targetname" ); foreach ( var_3 in var_1 ) { if ( var_3.script_noteworthy == "player" ) { level.player teletospot( var_3 ); continue; } foreach ( var_5 in level.heroes ) { if ( var_3.script_noteworthy == var_5.script_noteworthy ) var_5 teletospot( var_3 ); } } } teletospot( var_0 ) { if ( isplayer( self ) ) { self setorigin( var_0.origin ); self setplayerangles( var_0.angles ); } else self forceteleport( var_0.origin, var_0.angles ); } spawn_and_reinforce( var_0, var_1, var_2, var_3 ) { level endon( var_2 ); var_4 = getentarray( var_0, "targetname" ); if ( !isdefined( var_3 ) ) var_5 = maps\_utility::array_spawn( var_4 ); if ( !isdefined( var_1 ) ) { var_1[0] = 2; var_1[1] = 4; } var_6 = getentarray( var_0 + "_respawners", "targetname" ); var_7 = var_4.size; for (;;) { wait( randomfloatrange( var_1[0], var_1[1] ) ); var_5 = get_ai_array( var_0 ); var_8 = var_7 - var_5.size; for ( var_9 = 0; var_9 < var_8; var_9++ ) { var_10 = common_scripts\utility::random( var_6 ); var_11 = var_10 maps\_utility::spawn_ai(); wait( randomfloatrange( 0.4, 0.8 ) ); } } } set_random_targets( var_0 ) { self endon( "death" ); self endon( "stop_random_targets" ); if ( isstring( var_0 ) ) var_0 = getentarray( var_0, "targetname" ); for (;;) { var_1 = common_scripts\utility::random( var_0 ); self setentitytarget( var_1 ); wait( randomintrange( 2, 8 ) ); } } waittill_trigger( var_0, var_1, var_2, var_3 ) { if ( isdefined( var_3 ) ) level endon( "ender" ); if ( isstring( var_0 ) ) var_0 = getent( var_0, "targetname" ); for (;;) { var_0 waittill( "trigger", var_4 ); if ( !isdefined( var_4 ) ) break; if ( isdefined( var_1 ) && var_4 == var_1 ) { if ( isarray( var_1 ) ) { foreach ( var_6 in var_1 ) { if ( var_4 == var_6 ) break; } } else if ( var_4 == var_1 ) break; } if ( var_4 == level.player ) break; } if ( isdefined( var_2 ) ) self thread [[ var_2 ]](); } func_waittill_msg( var_0, var_1, var_2, var_3, var_4 ) { var_0 endon( "death" ); var_0 waittill( var_1 ); if ( isdefined( var_3 ) ) var_0 thread [[ var_2 ]]( var_3 ); else if ( isdefined( var_4 ) ) var_4 thread [[ var_2 ]]( var_3 ); else var_0 thread [[ var_2 ]](); } notify_trigger( var_0 ) { if ( isstring( var_0 ) ) var_0 = getent( var_0, "targetname" ); var_0 notify( "trigger" ); } delete_on_flag( var_0 ) { self endon( "death" ); if ( !isdefined( var_0 ) ) var_0 = self.script_parameters; common_scripts\utility::flag_wait( var_0 ); if ( isai( self ) || isalive( self ) ) delete_safe(); else self delete(); } smoke_trigger() { var_0 = maps\_utility::get_linked_structs(); var_1 = []; foreach ( var_3 in var_0 ) { if ( var_3 parameters_check( "smoke" ) ) var_1[var_1.size] = var_3; } self waittill( "trigger" ); foreach ( var_3 in var_1 ) { var_6 = 5; if ( var_3 parameters_check( "infinite" ) ) var_6 = undefined; if ( isdefined( var_3.script_timeout ) ) var_6 = var_3.script_timeout; var_3 thread playloopingfx( "smoke_grenade", 5.5, var_6 ); } } smoke_stop_trigger() { var_0 = maps\_utility::get_linked_structs(); var_1 = []; foreach ( var_3 in var_0 ) { if ( var_3 parameters_check( "smoke" ) ) var_1[var_1.size] = var_3; } self waittill( "trigger" ); maps\_utility::array_notify( var_1, "stop_looping_fx" ); } get_target_chain_array( var_0 ) { var_1 = []; while ( isdefined( var_0 ) ) { var_1[var_1.size] = var_0; if ( !isdefined( var_0.target ) ) break; var_0 = maps\_utility::getent_or_struct_or_node( var_0.target, "targetname" ); wait 0.05; } return var_1; } adjust_angles_to_player( var_0 ) { var_1 = var_0[0]; var_2 = var_0[2]; var_3 = anglestoright( level.player.angles ); var_4 = anglestoforward( level.player.angles ); var_5 = ( var_3[0], 0, var_3[1] * -1 ); var_6 = ( var_4[0], 0, var_4[1] * -1 ); var_0 = var_5 * var_1; var_0 = var_0 + var_6 * var_2; return var_0 + ( 0, var_0[1], 0 ); } playloopingfx( var_0, var_1, var_2, var_3, var_4 ) { self endon( "stop_looping_fx" ); self endon( "death" ); if ( !isdefined( var_1 ) ) var_1 = 0.05; var_5 = undefined; if ( isdefined( var_2 ) ) var_5 = gettime(); while ( isdefined( self ) ) { if ( isdefined( var_2 ) ) { if ( gettime() - var_5 >= var_2 ) break; } if ( isdefined( var_4 ) && var_4 == 1 ) { playfxontag( common_scripts\utility::getfx( var_0 ), self, var_3 ); wait( var_1 ); continue; } var_6 = self.origin; var_7 = undefined; if ( isdefined( var_3 ) ) { var_6 = self gettagorigin( var_3 ); var_7 = anglestoforward( self gettagangles( var_3 ) ); } if ( isdefined( var_7 ) ) playfx( common_scripts\utility::getfx( var_0 ), var_6 + ( 0, 0, 0 ), var_7 ); else playfx( common_scripts\utility::getfx( var_0 ), var_6 + ( 0, 0, 0 ) ); wait( var_1 ); } } postion_dot_check( var_0, var_1 ) { var_2 = anglestoforward( var_0.angles ); var_3 = vectornormalize( var_0.origin - var_1.origin ); var_4 = vectordot( var_2, var_3 ); if ( var_4 > 0 ) return "behind"; else return "infront"; } noteworthy_check( var_0, var_1 ) { if ( !isdefined( self.script_noteworthy ) ) return 0; if ( !isdefined( var_1 ) ) var_1 = " "; var_0 = tolower( var_0 ); var_2 = strtok( self.script_noteworthy, var_1 ); foreach ( var_4 in var_2 ) { var_4 = tolower( var_4 ); if ( var_4 == var_0 ) return 1; } return 0; } parameters_check( var_0, var_1 ) { if ( !isdefined( self.script_parameters ) ) return 0; if ( !isdefined( var_1 ) ) var_1 = " "; var_0 = tolower( var_0 ); var_2 = strtok( self.script_parameters, var_1 ); foreach ( var_4 in var_2 ) { var_4 = tolower( var_4 ); if ( var_4 == var_0 ) return 1; } return 0; } get_midpoint( var_0, var_1 ) { var_2 = 0; var_3 = 0; var_4 = 0; for ( var_5 = 0; var_5 < var_0.size; var_5++ ) { var_2 = var_2 + var_0[var_5][0]; var_3 = var_3 + var_0[var_5][1]; if ( isdefined( var_1 ) ) var_4 = var_4 + var_0[var_5][2]; } if ( isdefined( var_1 ) ) var_4 = var_4 / var_0.size; return ( var_2 / var_0.size, var_3 / var_0.size, var_4 ); } calculate_bezier_curve( var_0, var_1, var_2, var_3 ) { var_4 = var_0[0]; var_5 = var_0[1]; var_6 = var_0[2]; var_7 = var_0[0]; var_8 = var_0[1]; var_9 = var_0[2]; if ( !isdefined( var_2 ) ) { var_10 = [ var_0, var_1 ]; var_2 = get_midpoint( var_10, 1 ); } var_11 = var_2[0]; var_12 = var_2[1]; var_13 = var_2[2]; var_14 = []; for ( var_15 = 0; var_15 < var_3; var_15++ ) { var_16 = int( ( 1 - var_15 ) * ( 1 - var_15 ) * var_4 + 2 * ( 1 - var_15 ) * var_15 * var_11 + var_15 * var_15 * var_7 ); var_17 = int( ( 1 - var_15 ) * ( 1 - var_15 ) * var_5 + 2 * ( 1 - var_15 ) * var_15 * var_12 + var_15 * var_15 * var_8 ); var_18 = int( ( 1 - var_15 ) * ( 1 - var_15 ) * var_6 + 2 * ( 1 - var_15 ) * var_15 * var_13 + var_15 * var_15 * var_9 ); var_14[var_15] = ( var_16, var_17, var_18 ); } return var_14; } getclosest2d( var_0, var_1, var_2 ) { if ( !isdefined( var_2 ) ) var_2 = 500000; var_3 = undefined; foreach ( var_5 in var_1 ) { var_6 = distance2dsquared( var_5.origin, var_0 ); if ( var_6 >= squared( var_2 ) ) continue; var_2 = var_6; var_3 = var_5; } return var_3; } get_fov_2d( var_0, var_1, var_2 ) { var_3 = vectornormalize( ( var_2[0], var_2[1], 0 ) - ( var_0[0], var_0[1], 0 ) ); var_4 = anglestoforward( ( 0, var_1[1], 0 ) ); return vectordot( var_4, var_3 ); } get_fov( var_0, var_1, var_2 ) { var_3 = vectornormalize( var_2 - var_0 ); var_4 = anglestoforward( var_1 ); var_5 = vectordot( var_4, var_3 ); return var_5; } return_point_in_circle( var_0, var_1, var_2 ) { var_3 = var_1 * randomfloat( 1.0 ); var_4 = randomfloat( 360.0 ); var_5 = sin( var_4 ); var_6 = cos( var_4 ); var_7 = var_3 * var_6; var_8 = var_3 * var_5; var_9 = 0; if ( isdefined( var_2 ) ) var_9 = randomfloatrange( var_2 * -1, var_2 ); var_7 = var_7 + var_0[0]; var_8 = var_8 + var_0[1]; var_9 = var_9 + var_0[2]; return ( var_7, var_8, var_9 ); } kill_over_time( var_0, var_1, var_2, var_3 ) { foreach ( var_5 in var_0 ) { var_6 = randomfloatrange( var_1, var_2 ); var_5 thread kill_over_time_death( var_6, var_3 ); } } kill_over_time_death( var_0, var_1 ) { wait( var_0 ); if ( !isdefined( self ) || !isalive( self ) ) return; if ( isdefined( var_1 ) && var_1 ) { var_2 = [ "j_head", "tag_weapon_chest", "j_SpineUpper", "J_SpineLower" ]; var_3 = common_scripts\utility::random( var_2 ); var_4 = randomintrange( 1, 3 ); for ( var_5 = 0; var_5 < var_4; var_5++ ) { var_3 = common_scripts\utility::random( var_2 ); var_6 = "body_impact1"; if ( var_3 == "j_head" ) var_6 = "headshot_blood"; playfxontag( common_scripts\utility::getfx( var_6 ), self, var_3 ); } } kill_safe(); } array_remove_when_dead( var_0, var_1 ) { var_1 waittill( "death" ); common_scripts\utility::array_remove( var_0, var_1 ); } self_add_array( var_0 ) { var_0[var_0.size] = self; return var_0; } isentity( var_0 ) { return isdefined( var_0.classname ); } get_linked_struct() { var_0 = maps\_utility::get_linked_structs(); if ( var_0.size > 1 ) { } else if ( var_0.size < 1 ) { } return var_0[0]; } get_goalvolume( var_0 ) { return level.goalvolumes[var_0]; } cinematicmode_on( var_0 ) { level.player disableweapons(); level.player allowstand( 1 ); level.player allowcrouch( 0 ); level.player allowprone( 0 ); level.player allowjump( 0 ); level.player allowsprint( 0 ); if ( isdefined( var_0 ) && var_0 == 1 ) hud_hide(); } cinematicmode_off( var_0 ) { level.player enableweapons(); level.player allowcrouch( 1 ); level.player allowprone( 1 ); level.player allowjump( 1 ); level.player allowsprint( 1 ); if ( isdefined( var_0 ) && var_0 == 1 ) hud_show(); } hud_hide() { setsaveddvar( "g_friendlyNameDist", 0 ); setsaveddvar( "compass", "0" ); setsaveddvar( "ammoCounterHide", "1" ); setsaveddvar( "actionSlotsHide", "1" ); setsaveddvar( "hud_showstance", "0" ); } hud_show() { setsaveddvar( "g_friendlyNameDist", 15000 ); setsaveddvar( "compass", "1" ); setsaveddvar( "ammoCounterHide", "0" ); setsaveddvar( "actionSlotsHide", "0" ); setsaveddvar( "hud_showstance", "1" ); } player_heartbeat() { level.player endon( "stop_player_heartbeat" ); if ( !isdefined( level.heartbeatrate ) ) level.heartbeatrate = 0.8; for (;;) { level.player thread maps\_utility::play_sound_on_entity( "breathing_heartbeat" ); wait( level.heartbeatrate ); } } player_heartbeat_slowmo() { level.player endon( "stop_player_heartbeat" ); for (;;) { level.player playlocalsound( "breathing_heartbeat_homecoming", "sounddone" ); level.player waittill( "sounddone" ); } } player_hurt( var_0, var_1 ) { level.player endon( "stop_player_breathing" ); var_2 = level.player maps\_hud_util::create_client_overlay( "dogcam_edge", 0, level.player ); var_2.sort = 1; var_3 = level.player maps\_hud_util::create_client_overlay( "black", 0, level.player ); var_3.sort = -1; var_4 = 0.4; var_5 = 0.4; var_2 fadeovertime( var_4 ); var_2.alpha = 0.6; level.player.hurtfade = 1; thread player_hurt_cleanup( var_2, var_3, var_5 ); for (;;) { level.player.hurtfade = 1; var_3 fadeovertime( var_4 ); var_3.alpha = 0.6; if ( isdefined( var_0 ) ) level.player thread maps\_utility::set_vision_set( "aftermath_hurt", var_4 ); if ( !isdefined( var_1 ) ) level.player common_scripts\utility::play_sound_in_space( "breathing_limp_start" ); level.player.hurtfade = 0; var_3 fadeovertime( var_5 ); var_3.alpha = 0; if ( isdefined( var_0 ) ) level.player thread maps\_utility::set_vision_set( "aftermath_walking", var_4 ); wait( randomfloatrange( 1, 3 ) ); } } player_hurt_single( var_0 ) { var_1 = level.player maps\_hud_util::create_client_overlay( "dogcam_edge", 0, level.player ); var_1.sort = 1; var_2 = level.player maps\_hud_util::create_client_overlay( "black", 0, level.player ); var_2.sort = -1; var_3 = 0.4; var_4 = 0.4; level.player.hurtfade = 1; thread player_hurt_cleanup( var_1, var_2, var_4 ); level.player.hurtfade = 1; var_1 fadeovertime( var_3 ); var_1.alpha = 1; var_2 fadeovertime( var_3 ); var_2.alpha = 0.3; level.player common_scripts\utility::play_sound_in_space( "breathing_hurt" ); level.player.hurtfade = 0; var_1 fadeovertime( var_4 ); var_1.alpha = 0; var_2 fadeovertime( var_4 ); var_2.alpha = 0; } player_hurt_cleanup( var_0, var_1, var_2 ) { level.player waittill( "stop_player_breathing" ); if ( level.player.hurtfade == 1 ) { var_0 fadeovertime( var_2 ); var_0.alpha = 0; var_1 fadeovertime( var_2 ); var_1.alpha = 0; } wait( var_2 ); var_0 destroy(); var_1 destroy(); } waittill_forever() { } earthquake_loop( var_0, var_1 ) { level.player endon( "stop_earthquake_loop" ); level.player notify( "new_earthquake_loop" ); level.player endon( "new_earthquake_loop" ); for (;;) { if ( !isdefined( var_1 ) ) var_1 = level.player.origin; earthquake( var_0, 1, var_1, 5000 ); wait 0.2; } } screenshake_loop( var_0 ) { level.player endon( "stop_earthquake_loop" ); level.player notify( "new_earthquake_loop" ); level.player endon( "new_earthquake_loop" ); for (;;) { screenshake( var_0, 1, level.player.origin, 5000 ); wait 0.2; } } set_mortar_on( var_0 ) { common_scripts\utility::flag_wait( "load_setup_complete" ); var_1 = getentarray( "mortar_on", "targetname" ); foreach ( var_3 in var_1 ) { if ( isdefined( var_3.script_mortargroup ) ) { if ( var_3.script_mortargroup == maps\_utility::string( var_0 ) ) var_3 notify( "trigger" ); } } } fire_fake_javelin( var_0, var_1, var_2 ) { if ( !isdefined( var_2 ) ) var_2 = "javelin_no_explode"; if ( !isdefined( var_1 ) ) var_1 = common_scripts\utility::getfx( "javelin_explosion_cheap" ); var_3 = undefined; if ( isalive( self ) ) { var_3 = self.javelin gettagorigin( "tag_flash" ); playfxontag( common_scripts\utility::getfx( "javelin_muzzle" ), self.javelin, "tag_flash" ); } else var_3 = self.origin; var_4 = var_0.origin; var_5 = magicbullet( var_2, var_3, var_4 ); var_6 = 0; if ( isentity( var_0 ) ) var_6 = 1; if ( var_6 ) { var_0 notify( "missile_targeted", var_5 ); var_5 missile_settargetent( var_0 ); } else var_5 missile_settargetpos( var_4 ); var_5 missile_setflightmodetop(); var_5 waittill( "death" ); var_7 = var_5.origin; if ( isdefined( var_7 ) ) playfx( var_1, var_7 ); if ( isdefined( var_5 ) && isvalidmissile( var_5 ) ) var_5 delete(); } #using_animtree("generic_human"); fake_shooter_think() { self endon( "stop_fake_behavior" ); self endon( "death" ); thread fake_shooter_death(); var_0 = common_scripts\utility::getstruct( self.target, "targetname" ); self.animspot = var_0; var_1 = "coverstand"; if ( parameters_check( "crouch" ) ) var_1 = "covercrouch"; var_2 = var_1 + "_hide_idle"; var_3 = var_1 + "_reload"; var_4 = var_1 + "_hide_2_aim"; var_5 = var_1 + "_aim"; var_6 = var_1 + "_aim_2_hide"; var_7 = %exposed_aim_2; var_8 = 0; for (;;) { if ( !var_8 ) { var_0 thread maps\_anim::anim_generic_loop( self, var_2 ); var_8 = 1; } wait( randomintrange( 1, 3 ) ); if ( common_scripts\utility::cointoss() ) { var_0 notify( "stop_loop" ); self stopanimscripted(); var_8 = 0; if ( common_scripts\utility::cointoss() ) var_0 maps\_anim::anim_generic( self, var_3 ); var_0 maps\_anim::anim_generic( self, var_4 ); thread fake_shooter_shoot(); thread maps\_anim::anim_generic_loop( self, var_5 ); self setanimknobrestart( var_7, 1, 0.2, 1.0 ); wait( randomintrange( 4, 8 ) ); self notify( "stop_loop" ); self notify( "stop_shooting" ); self stopanimscripted(); maps\_anim::anim_generic( self, var_6 ); } } } fake_shooter_shoot() { self endon( "stop_shooting" ); self endon( "death" ); for (;;) { wait( randomfloatrange( 0.2, 0.6 ) ); self shootblank(); } } fake_shooter_death() { self endon( "stop_fake_behavior" ); maps\_utility::set_allowdeath( 1 ); self waittill( "death" ); self stopanimscripted(); self.animspot notify( "stop_loop" ); self notify( "stop_loop" ); } set_ai_array( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = self.script_parameters; if ( !isdefined( level.aiarray[var_0] ) ) level.aiarray[var_0] = []; level.aiarray[var_0] = common_scripts\utility::array_add( level.aiarray[var_0], self ); thread ai_array_remove_on_death( var_0 ); } ai_array_remove_on_death( var_0 ) { self waittill( "death" ); level.aiarray[var_0] = common_scripts\utility::array_remove( level.aiarray[var_0], self ); } get_ai_array( var_0 ) { level.aiarray[var_0] = maps\_utility::array_removedead( level.aiarray[var_0] ); return level.aiarray[var_0]; } delete_ai_array( var_0 ) { if ( !isdefined( level.aiarray[var_0] ) ) { iprintln( "Trying to delete undefined aiArray" ); iprintln( "This should only happen when on a start point." ); return; } var_1 = get_ai_array( var_0 ); common_scripts\utility::array_thread( var_1, ::delete_safe ); } blackout( var_0, var_1 ) { fadeoverlay( var_0, 1, var_1 ); } grayout( var_0, var_1 ) { fadeoverlay( var_0, 0.6, var_1 ); } restorevision( var_0, var_1 ) { fadeoverlay( var_0, 0, var_1 ); } fadeoverlay( var_0, var_1, var_2 ) { self fadeovertime( var_0 ); self.alpha = var_1; setblur( var_2, var_0 ); wait( var_0 ); } ignore_everything() { self.ignoreall = 1; self.grenadeawareness = 0; self.ignoreexplosionevents = 1; self.ignorerandombulletdamage = 1; self.ignoresuppression = 1; self.disablebulletwhizbyreaction = 1; maps\_utility::disable_pain(); self.og_newenemyreactiondistsq = self.newenemyreactiondistsq; self.newenemyreactiondistsq = 0; } clear_ignore_everything() { self.ignoreall = 0; self.grenadeawareness = 1; self.ignoreexplosionevents = 0; self.ignorerandombulletdamage = 0; self.ignoresuppression = 0; self.fixednode = 1; self.disablebulletwhizbyreaction = 0; maps\_utility::enable_pain(); if ( isdefined( self.og_newenemyreactiondistsq ) ) self.newenemyreactiondistsq = self.og_newenemyreactiondistsq; } move_on_path( var_0, var_1 ) { self endon( "stop_path" ); self endon( "death" ); disable_arrivals_and_exits(); var_2 = get_target_chain_array( var_0 ); foreach ( var_4 in var_2 ) { if ( isdefined( var_4.script_animation ) ) { var_4 maps\_anim::anim_generic_reach( self, var_4.script_animation ); var_4 maps\_anim::anim_generic( self, var_4.script_animation ); } else { var_5 = undefined; if ( isdefined( var_4.radius ) ) var_5 = var_4.radius; else var_5 = 56; childthread force_goalradius( var_5 ); self setgoalpos( var_4.origin ); while ( distancesquared( var_4.origin, self.origin ) > squared( self.goalradius ) ) wait 0.1; } if ( isdefined( var_4.script_noteworthy ) ) self notify( var_4.script_noteworthy ); } if ( isdefined( var_1 ) ) delete_safe(); } delete_safe() { if ( !isdefined( self ) || !isalive( self ) ) return; if ( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield == 1 ) maps\_utility::stop_magic_bullet_shield(); if ( isdefined( self.furfx ) ) thread maps\_utility_dogs::kill_dog_fur_effect_and_delete(); else self delete(); } kill_safe() { if ( !isdefined( self ) || !isalive( self ) ) return; if ( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield == 1 ) maps\_utility::stop_magic_bullet_shield(); self kill(); } create_dead_guys( var_0, var_1, var_2 ) { if ( isdefined( var_1 ) ) common_scripts\utility::flag_wait( var_1 ); var_3 = getent( var_0 + "_spawner", "targetname" ); var_4 = common_scripts\utility::getstructarray( var_0, "targetname" ); var_5 = []; foreach ( var_7 in var_4 ) { var_8 = var_3 maps\_utility::spawn_ai(); var_8 maps\_utility::gun_remove(); if ( !isdefined( var_7.angles ) ) var_7.angles = ( 0, 0, 0 ); var_9 = spawn( "script_model", var_8.origin ); var_9.angles = var_8.angles; var_9 setmodel( var_8.model ); var_10 = var_8 getattachsize(); for ( var_11 = 0; var_11 < var_10; var_11++ ) { var_12 = var_8 getattachmodelname( var_11 ); var_13 = var_8 getattachtagname( var_11 ); var_9 attach( var_12, var_13, 1 ); } var_9 useanimtree( #animtree ); var_9.animname = "generic"; var_5 = common_scripts\utility::array_add( var_5, var_9 ); var_8 delete(); var_14 = var_7.animation; var_7 thread maps\_anim::anim_generic_first_frame( var_9, var_14 ); if ( var_7 parameters_check( "blood_pool" ) ) playfx( common_scripts\utility::getfx( "blood_pool" ), var_9.origin ); common_scripts\utility::waitframe(); } if ( isdefined( var_2 ) ) { common_scripts\utility::flag_wait( var_2 ); maps\_utility::array_delete( var_5 ); } } ambient_runner_think() { self endon( "death" ); disable_arrivals_and_exits(); ignore_everything(); maps\_utility::pathrandompercent_zero(); self.fixednode = 0; self.interval = 0; self.pushable = 0; self.badplaceawareness = 0; var_0 = common_scripts\utility::getstruct( self.target, "targetname" ); while ( isdefined( var_0 ) ) { var_1 = 56; if ( isdefined( var_0.radius ) ) var_1 = var_0.radius; self setgoalpos( var_0.origin ); waittill_goal( var_1 ); if ( !isdefined( var_0.target ) ) break; var_2 = common_scripts\utility::getstructarray( var_0.target, "targetname" ); if ( var_2.size > 1 ) { var_0 = var_2[randomint( var_2.size )]; continue; } var_0 = var_2[0]; } self delete(); } waittill_goal( var_0, var_1 ) { self endon( "death" ); if ( isdefined( var_0 ) ) self.goalradius = var_0; self waittill( "goal" ); if ( isdefined( var_1 ) ) self delete(); } waittill_real_goal( var_0, var_1 ) { self endon( "death" ); self notify( "setting_new_goal" ); self endon( "setting_new_goal" ); for (;;) { self waittill( "goal" ); var_2 = self.goalradius; if ( isdefined( var_0.radius ) ) var_2 = var_0.radius; if ( distance( var_0.origin, self.origin ) < var_2 + 10 ) break; } if ( isdefined( var_1 ) ) delete_safe(); if ( !isdefined( var_0.script_noteworthy ) ) return; switch ( var_0.script_noteworthy ) { case "deleteme": self delete(); break; case "deleteme_safe": delete_safe(); break; case "killme": self kill(); break; } } force_goalradius( var_0 ) { self notify( "force_goal_radius" ); self endon( "force_goal_radius" ); self endon( "death" ); for (;;) { self.goalradius = var_0; wait 0.1; } } waittill_death_respawn( var_0, var_1, var_2 ) { var_0 endon( "stop_spawning" ); var_3 = self; for (;;) { var_3 common_scripts\utility::waittill_any( "death", "dying" ); wait( randomfloatrange( var_1, var_2 ) ); var_3 = var_0 maps\_utility::spawn_ai(); } } waittill_spawners_empty( var_0, var_1 ) { var_2 = spawnstruct(); common_scripts\utility::array_thread( var_0, ::waittill_spawner_spawns, var_2 ); if ( !isdefined( var_1 ) ) { foreach ( var_4 in var_0 ) var_1 = var_1 + var_4.count; } while ( var_2.deathcounter < var_1 ) wait 0.1; iprintlnbold( "killed enough" ); } waittill_spawner_spawns( var_0 ) { while ( isdefined( self ) ) { if ( self.count < 1 ) break; self waittill( "spawned", var_1 ); var_0.deathcounter++; } } waittill_stealth_notify() { self endon( "death" ); level endon( "stealth_event_notify" ); self addaieventlistener( "grenade danger" ); self addaieventlistener( "projectile_impact" ); self addaieventlistener( "silenced_shot" ); self addaieventlistener( "bulletwhizby" ); self addaieventlistener( "gunshot" ); self addaieventlistener( "gunshot_teammate" ); self addaieventlistener( "explode" ); self waittill( "ai_event", var_0 ); level notify( "stealth_event_notify", self ); } disable_arrivals_and_exits( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = 1; self.disablearrivals = var_0; self.disableexits = var_0; } set_all_ai_targetnames( var_0 ) { if ( !isdefined( var_0.targetname ) ) return; self.targetname = var_0.targetname; } enemy_rpg_unlimited_ammo( var_0 ) { if ( isdefined( var_0 ) ) self endon( var_0 ); self endon( "death" ); var_1 = 1; for (;;) { if ( isdefined( self.a.rockets ) ) self.a.rockets = var_1; wait 0.05; } } goal_radius_constant( var_0 ) { self endon( "death" ); for (;;) { maps\_utility::set_goal_radius( var_0 ); wait 0.1; } } vehicle_set_parameters() { var_0 = strtok( self.script_parameters, " " ); foreach ( var_2 in var_0 ) { switch ( var_2 ) { case "path_notifications": thread vehicle_path_notifications(); break; case "allow_player_damage": thread vehicle_allow_player_death(); break; case "a10_strafe_vehicle": thread maps\homecoming_a10::set_a10_strafe_vehicle(); break; case "a10_strafe_target": thread maps\homecoming_a10::set_a10_strafe_target_vehicle(); break; } } } #using_animtree("vehicles"); vehicle_to_model() { var_0 = spawn( "script_model", self.origin ); var_0.angles = self.angles; var_0 setmodel( self.model ); var_0 useanimtree( #animtree ); self.fakemodel = var_0; self hide(); maps\_vehicle::move_riders_here( self.fakemodel ); maps\_vehicle_code::move_turrets_here( self.fakemodel ); return var_0; } model_to_vehicle() { self vehicle_teleport( self.fakemodel.origin, self.fakemodel.angles ); self show(); maps\_vehicle_code::move_turrets_here( self ); if ( isdefined( self.mgturret ) && isdefined( self.riders ) ) { if ( isdefined( self.mgturret[1] ) && isdefined( self.riders[0] ) ) { var_0 = self.riders[0]; var_0 unlink(); var_0 linkto( self.mgturret[1], "tag_origin", ( 0, 0, -25 ), ( 0, 0, 0 ) ); } } self.fakemodel delete(); self.fakemodel = undefined; } nh90_doors_open() { self waittill( "unloading" ); self setanim( %nh90_left_door_open ); self setanim( %nh90_right_door_open ); } create_default_targetent( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = "tag_flash"; var_1 = anglestoforward( self gettagangles( var_0 ) ); var_2 = spawn( "script_origin", self gettagorigin( var_0 ) + var_1 * 50 ); var_2 linkto( self ); self.defaulttarget = var_2; } vehicle_fire_at_targets( var_0, var_1, var_2, var_3 ) { self endon( "death" ); self endon( "stop_firing" ); self notify( "engaging_new_targets" ); self endon( "engaging_new_targets" ); if ( !isdefined( var_1 ) ) var_1 = 1; if ( !isdefined( var_2 ) ) var_2 = 0.5; if ( !isdefined( var_3 ) ) var_3 = 1; var_4 = 1; if ( isdefined( self.turretturntime ) ) var_4 = self.turretturntime; var_5 = undefined; if ( isdefined( self.firerumble ) ) var_5 = self.firerumble; var_6 = ::vehicle_fire; if ( isdefined( self.tankfireoverride ) ) var_6 = self.tankfireoverride; var_7 = undefined; for (;;) { wait( randomfloatrange( var_2, var_3 ) ); var_8 = 0; var_9 = var_0; if ( isdefined( var_7 ) ) var_9 = common_scripts\utility::array_remove( var_0, var_7 ); var_10 = var_9[randomint( var_9.size )]; if ( var_9.size > 1 ) var_7 = var_10; self.currentvehicletarget = var_10; self setturrettargetvec( var_10.origin ); wait( var_4 ); for ( var_11 = 0; var_8 < var_1; var_11 = 0.2 ) { wait( var_11 ); if ( isdefined( var_5 ) ) self playrumbleonentity( var_5 ); self [[ var_6 ]](); var_8++; } } } vehicle_fire_loop( var_0, var_1, var_2 ) { self endon( "death" ); self endon( "stop_firing" ); if ( !isdefined( var_1 ) ) var_1 = 0.5; if ( !isdefined( var_2 ) ) var_2 = 1; for (;;) { wait( randomfloatrange( var_1, var_2 ) ); vehicle_fire( var_0 ); } } vehicle_fire( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = "tag_flash"; self fireweapon( var_0 ); } vehicle_play_sound( var_0 ) { var_1 = var_0.script_sound; if ( var_0 parameters_check( "inSpace" ) ) thread common_scripts\utility::play_sound_in_space( var_1 ); else thread maps\_utility::play_sound_on_entity( var_1 ); } attach_path_and_drive( var_0 ) { self attachpath( var_0 ); self startpath( var_0 ); thread maps\_vehicle::vehicle_paths( var_0 ); } vehicle_allow_player_death( var_0, var_1 ) { self endon( "death" ); self.bulletcount = 0; maps\_vehicle::godon(); self setcandamage( 1 ); switch ( self.classname ) { case "script_vehicle_t90ms": self.fakehealth = 2000; break; case "script_vehicle_t90ms_trophy": self.fakehealth = 2000; break; case "script_vehicle_t90ms_turret": self.fakehealth = 2000; break; case "script_vehicle_m880_launcher": self.fakehealth = 2000; break; case "script_vehicle_nh90": self.fakehealth = 200; break; case "script_vehicle_nh90_cheap": self.fakehealth = 200; break; case "script_vehicle_hind_battle": self.fakehealth = 1000; break; case "script_vehicle_hind_battle_oilrocks": self.fakehealth = 1000; break; default: } var_2 = self.fakehealth; for (;;) { self waittill( "damage", var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12 ); if ( !isplayer( var_4 ) ) continue; if ( isdefined( self.fakehealthinvulnerability ) && self.fakehealthinvulnerability == 1 ) continue; if ( isdefined( self.flareprotection ) && self.flareprotection == 1 ) { if ( var_7 == "MOD_PROJECTILE" || var_7 == "MOD_PROJECTILE_SPLASH" ) continue; } var_12 = tolower( var_12 ); switch ( var_12 ) { case "maaws": self.fakehealth = self.fakehealth - 500; break; case "dshk_turret_homecoming": self.fakehealth = self.fakehealth - 10; break; case "chaingun_turret": self.fakehealth = self.fakehealth - 10; break; case "a10_30mm_player_homecoming": self.fakehealth = self.fakehealth - 200; break; } if ( isdefined( var_0 ) ) self childthread [[ var_0 ]]( var_2 ); if ( self.fakehealth <= 0 ) { if ( isdefined( var_1 ) ) { self thread [[ var_1 ]]( var_12 ); return; } maps\_vehicle::godoff(); self.dontallowexplode = undefined; self.forceexploding = 1; self notify( "death", level.player, undefined, var_12 ); } if ( isdefined( self.beachlander ) ) { if ( maps\_utility::ent_flag( "unload_interrupted" ) ) continue; if ( self.fakehealth <= int( var_2 / 2 ) ) maps\_utility::ent_flag_set( "unload_interrupted" ); } } } javelin_target_set( var_0, var_1 ) { target_set( var_0, var_1 ); target_setjavelinonly( var_0, 1 ); target_setattackmode( var_0, "top" ); var_0 thread javelin_target_death(); } javelin_target_death() { self waittill( "death" ); if ( isdefined( self ) && isalive( self ) ) target_remove( self ); } javelin_check_decent( var_0 ) { var_0 endon( "death" ); wait 2; for (;;) { var_1 = var_0.origin[2]; wait 0.1; var_2 = var_0.origin[2]; if ( var_1 > var_2 ) break; } } stinger_target_set() { target_set( self, ( 0, 0, 50 ) ); target_hidefromplayer( self, level.player ); } turret_shoot_targets( var_0, var_1 ) { var_2 = self; var_2 notify( "turret_shoot_targets" ); var_2 endon( "turret_shoot_targets" ); var_2 endon( "turret_stop_shooting_targets" ); var_2 endon( "death" ); var_2 setmode( "manual" ); if ( var_2 parameters_check( "fakefire" ) ) var_1 = 1; var_3 = ::turret_startfiring; if ( isdefined( var_1 ) ) var_3 = ::turret_startfakefiring; var_4 = var_0; var_5 = undefined; for (;;) { if ( var_0.size > 1 ) { var_5 = common_scripts\utility::random( var_4 ); var_4 = common_scripts\utility::array_remove( var_0, var_5 ); } else var_5 = var_4[0]; var_2 settargetentity( var_5, ( 0, 0, 0 ) ); var_2 childthread [[ var_3 ]](); wait( randomfloatrange( 1.5, 3 ) ); var_2 thread turret_stopfiring(); wait( randomfloatrange( 0.5, 1.5 ) ); } } turret_startfiring() { self endon( "stop_firing_turret" ); self endon( "death" ); for (;;) { self shootturret(); wait 0.15; } } turret_startfakefiring( var_0, var_1 ) { self endon( "stop_firing_turret" ); self endon( "turret_shoot_targets" ); self endon( "death" ); var_2 = "mg_tracer"; if ( isdefined( var_0 ) ) var_2 = var_0; if ( parameters_check( "nosound" ) ) var_1 = 1; for (;;) { playfxontag( common_scripts\utility::getfx( var_2 ), self, "tag_flash" ); if ( !isdefined( var_1 ) ) self playsound( "weap_kacsawtur_fire_npc" ); wait 0.15; } } turret_stopfiring() { self notify( "stop_firing_turret" ); } default_mg_guy() { if ( maps\homecoming_drones::isdrone() ) { maps\homecoming_drones::default_mg_drone(); return undefined; } thread maps\_utility::magic_bullet_shield(); ignore_everything(); maps\_utility::gun_remove(); var_0 = getent( self.target, "targetname" ); var_0 thread maps\_anim::anim_generic_first_frame( self, "stand_gunner_idle" ); self linkto( var_0, "trigger", ( -16, 10, -55 ), ( 0, 0, 0 ) ); if ( !isdefined( var_0.script_linkto ) ) return; var_1 = var_0 common_scripts\utility::get_linked_ents(); self endon( "death" ); var_0 childthread turret_shoot_targets( var_1 ); return var_0; } set_mk23_model() { var_0 = spawn( "script_model", self.origin ); var_0 setmodel( "vehicle_mk23_truck_iw6" ); var_0 linkto( self, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); self hide(); self waittill( "death" ); var_0 delete(); } vehicle_path_notifications() { self endon( "death" ); for (;;) { self waittill( "noteworthy", var_0 ); if ( maps\_vehicle::ishelicopter() ) { thread heli_path_notifications( var_0 ); continue; } var_1 = self.currentnode; switch ( var_0 ) { case "target_nothing": self notify( "stop_firing" ); break; case "fire_at_targets": var_2 = var_1 maps\_utility::get_linked_structs(); var_3 = undefined; if ( isdefined( self.script_shotcount ) ) var_3 = self.script_shotcount; var_4 = undefined; var_5 = undefined; if ( !isdefined( self.firetime ) ) vehicle_get_firetime(); if ( isdefined( self.firetime ) ) { var_4 = self.firetime[0]; var_5 = self.firetime[1]; } thread vehicle_fire_at_targets( var_2, var_3, var_4, var_5 ); break; case "strafe_start": thread a10_strafe_run( var_1 ); break; case "strafe_start_cheap": thread a10_strafe_run_cheap( var_1 ); break; case "play_sound": thread vehicle_play_sound( var_1 ); break; } } } vehicle_get_firetime() { var_0 = strtok( self.classname, "_" ); foreach ( var_2 in var_0 ) { if ( var_2 == "t90ms" || var_2 == "abrams" ) { self.firetime[0] = 2; self.firetime[1] = 4; } } } heli_path_notifications( var_0 ) { self endon( "death" ); var_1 = self.currentnode; if ( var_0 == "target_nothing" ) { self notify( "stop_firing" ); self clearlookatent(); } else if ( var_0 == "fire_at_targets" ) { var_2 = undefined; if ( parameters_check( "turret_cheap" ) ) var_2 = 1; var_3 = var_1 common_scripts\utility::get_linked_ents(); var_4 = []; var_4[0] = "tag_missile_left"; var_4[1] = "tag_missile_right"; var_5 = -1; var_6 = 0; foreach ( var_8 in var_3 ) { if ( isdefined( var_8.script_turret ) ) continue; if ( isdefined( var_8.script_index ) ) { var_3 = common_scripts\utility::array_remove( var_3, var_8 ); var_3 = common_scripts\utility::array_insert( var_3, var_8, var_8.script_index ); } } foreach ( var_8 in var_3 ) { if ( isdefined( var_8.script_turret ) ) { var_11 = undefined; if ( var_8 parameters_check( "lookat" ) ) var_11 = 1; else if ( var_8 parameters_check( "cheap" ) ) var_2 = 1; if ( self.classname == "script_vehicle_hind_battle_oilrocks" ) thread heli_fire_turret_oilrocks( var_8, var_11, var_2 ); else thread heli_fire_turret( var_8, var_11, var_2 ); continue; } var_12 = undefined; if ( isdefined( var_8.delay ) ) var_12 = var_8.delay; var_13 = 1; if ( isdefined( var_8.script_shotcount ) ) var_13 = var_8.script_shotcount; var_14 = undefined; if ( isdefined( var_8.script_noteworthy ) ) var_14 = var_8.script_noteworthy; var_15 = 0; if ( isdefined( var_8.script_delay ) ) { var_15 = var_8.script_delay; var_6 = var_15 + var_6; } if ( var_8 parameters_check( "add_delay" ) ) var_15 = var_6; if ( var_8 parameters_check( "left" ) ) var_5 = 0; else if ( var_8 parameters_check( "right" ) ) var_5 = 1; else { var_5++; if ( var_5 >= var_4.size ) var_5 = 0; } maps\_utility::delaythread( var_15, ::heli_fire_missiles, var_8, var_13, var_4[var_5], var_12, var_14 ); } } else if ( var_0 == "play_sound" ) thread vehicle_play_sound( var_1 ); } heli_enable_rocketdeath( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = 1; self.enablerocketdeath = var_0; self.alwaysrocketdeath = var_0; } heli_fire_missiles( var_0, var_1, var_2, var_3, var_4 ) { var_5 = "missile_attackheli"; if ( isdefined( var_4 ) ) var_5 = var_4; if ( !isdefined( var_3 ) ) var_3 = 1; var_6 = "hind_turret_oilrocks"; if ( isdefined( self.defaultweapon ) ) var_6 = self.defaultweapon; self.firingmissiles = 1; var_7 = undefined; for ( var_8 = 0; var_8 < var_1; var_8++ ) { self setvehweapon( var_5 ); var_7 = self fireweapon( var_2, var_0 ); if ( var_5 == "missile_attackheli_no_explode" ) var_7 thread heli_firemissile_noexplode(); if ( var_8 < var_1 - 1 ) wait( var_3 ); } self setvehweapon( var_6 ); self.firingmissiles = 0; self notify( "missile_fired", var_7 ); return var_7; } heli_firemissile_noexplode() { self waittill( "death" ); if ( isdefined( self ) ) { thread common_scripts\utility::play_sound_in_space( "missile_attackheli_bunker_explosion", self.origin ); earthquake( 0.55, 1, self.origin, 500 ); playrumbleonposition( "artillery_rumble", self.origin ); } } heli_fire_turret( var_0, var_1, var_2, var_3 ) { self endon( "death" ); self notify( "switching_targets" ); self endon( "switching_targets" ); self endon( "stop_firing" ); if ( !isdefined( self.defaultweapon ) ) self.defaultweapon = "hind_turret_oilrocks"; self setvehweapon( self.defaultweapon ); if ( isentity( var_0 ) ) { self setturrettargetent( var_0 ); if ( isdefined( var_1 ) ) self setlookatent( var_0 ); } else self setturrettargetvec( var_0.origin ); var_4 = 30; var_5 = 50; if ( isdefined( self.script_burst_min ) && isdefined( self.script_burst_max ) ) { var_4 = self.script_burst_min; var_5 = self.script_burst_max; } var_6 = 0.05; if ( isdefined( self.firewait ) ) var_6 = self.firewait; for (;;) { thread heli_fire_turret_sound(); var_7 = randomintrange( var_4, var_5 ); for ( var_8 = 0; var_8 < var_7; var_8++ ) { if ( isdefined( self.firingmissiles ) && self.firingmissiles == 1 ) continue; if ( isdefined( var_2 ) || isdefined( self.helifirecheap ) && self.helifirecheap == 1 ) heli_fireminigun_cheap(); else self fireweapon( "tag_barrel" ); wait( var_6 ); } self notify( "stop_minigun_sound" ); wait( randomfloatrange( 0.4, 0.9 ) ); } } heli_fireminigun_cheap() { playfxontag( common_scripts\utility::getfx( "chopper_minigun_tracer" ), self, "tag_flash" ); } heli_fire_turret_sound() { var_0 = spawn( "script_origin", self.origin ); var_0 linkto( self, "tag_flash", ( 0, 0, 0 ), ( 0, 0, 0 ) ); var_1 = "minigun_heli_gatling_fire"; if ( isdefined( self.firesoundoverride ) ) var_1 = self.firesoundoverride; var_0 thread common_scripts\utility::play_loop_sound_on_entity( var_1 ); common_scripts\utility::waittill_any( "death", "switching_targets", "stop_firing", "stop_minigun_sound" ); var_0 common_scripts\utility::stop_loop_sound_on_entity( "minigun_heli_gatling_fire" ); var_0 delete(); } heli_fire_turret_oilrocks( var_0, var_1, var_2 ) { self endon( "death" ); self notify( "switching_targets" ); self endon( "switching_targets" ); self endon( "stop_firing" ); var_3 = self.mgturret[0]; var_3 setmode( "manual" ); var_3 settargetentity( var_0 ); if ( isdefined( var_1 ) ) self setlookatent( var_0 ); var_4 = 30; var_5 = 50; if ( isdefined( self.script_burst_min ) && isdefined( self.script_burst_max ) ) { var_4 = self.script_burst_min; var_5 = self.script_burst_max; } var_6 = 0.05; if ( isdefined( self.firewait ) ) var_6 = self.firewait; for (;;) { var_7 = randomintrange( var_4, var_5 ); for ( var_8 = 0; var_8 < var_7; var_8++ ) { if ( isdefined( var_2 ) || isdefined( self.helifirecheap ) && self.helifirecheap == 1 ) heli_fireminigun_cheap(); else var_3 shootturret(); wait( var_6 ); } wait( randomfloatrange( 0.4, 0.9 ) ); } } heli_beach_lander_init() { self endon( "death" ); maps\_utility::ent_flag_init( "unload_interrupted" ); maps\_utility::ent_flag_init( "landing_gear" ); maps\_utility::ent_flag_init( "unload_started" ); maps\_utility::ent_flag_init( "unload_complete" ); self.beachlander = 1; if ( parameters_check( "instant_landing" ) ) { self.currentnode = common_scripts\utility::getstruct( self.script_linkto, "script_linkname" ); self vehicle_teleport( self.currentnode.origin, self.currentnode.angles ); self setanimrestart( %nh90_landing_gear_down, 1, 1, 999 ); } else { var_0 = common_scripts\utility::waittill_any_return( "landing_gear", "reached_dynamic_path_end" ); if ( var_0 == "landing_gear" ) { maps\_utility::ent_flag_set( "landing_gear" ); self setanimrestart( %nh90_landing_gear_down, 1, 1, 0.5 ); self waittill( "reached_dynamic_path_end" ); } } var_1 = self.currentnode; self setneargoalnotifydist( 5 ); self sethoverparams( 0, 0, 0 ); self setvehgoalpos( var_1.origin, 1 ); self cleargoalyaw(); self settargetyaw( common_scripts\utility::flat_angle( self.angles )[1] ); self waittill( "near_goal" ); maps\_utility::ent_flag_set( "unload_started" ); self.fakehealthinvulnerability = 1; common_scripts\utility::delaycall( randomfloatrange( 0.1, 0.3 ), ::setanim, %nh90_left_door_open ); common_scripts\utility::delaycall( randomfloatrange( 0.1, 0.3 ), ::setanim, %nh90_right_door_open ); var_2 = 0; self.unloaded = 0; var_3 = var_1 common_scripts\utility::get_linked_ents(); self.unloadspawners = var_3; foreach ( var_5 in var_3 ) { wait( randomfloatrange( 0.5, 1 ) ); var_6 = 3; if ( isdefined( var_5.script_index ) ) var_6 = var_5.script_index; var_2 = var_6 + var_2; var_7 = common_scripts\utility::getstruct( var_5.script_linkto, "script_linkname" ); var_5 thread heli_beach_lander_ai_jumpout( var_7, var_6, self ); } self.fakehealthinvulnerability = undefined; while ( self.unloaded != var_2 ) { if ( maps\_utility::ent_flag( "unload_interrupted" ) ) break; wait 0.1; } if ( isdefined( var_1.script_flag_wait ) ) common_scripts\utility::flag_wait( var_1.script_flag_wait ); if ( isdefined( self.takeoffdelay ) ) { var_9 = self.takeoffdelay * 1000; var_10 = gettime(); while ( gettime() - var_10 < var_9 ) { if ( maps\_utility::ent_flag( "unload_interrupted" ) ) break; wait 0.1; } } self notify( "unload_complete" ); maps\_utility::ent_flag_set( "unload_complete" ); thread heli_beach_lander_leave( var_1 ); } heli_beach_lander_leave( var_0 ) { var_1 = var_0 maps\_utility::get_linked_structs(); thread maps\_vehicle::vehicle_paths( var_1[0] ); self setanimrestart( %nh90_landing_gear_up, 1, 1, 0.3 ); heli_enable_rocketdeath( 0 ); self.fakehealth = 25; self.fakehealthinvulnerability = 1; wait 1; self.fakehealthinvulnerability = undefined; } heli_beach_lander_ai_jumpout( var_0, var_1, var_2 ) { var_2 endon( "death" ); var_3 = 0; while ( var_3 < var_1 ) { var_4 = maps\_utility::spawn_ai(); if ( !isdefined( var_4 ) ) { wait 0.1; continue; } var_4 maps\homecoming_beach::beach_enemy_default(); var_4 maps\_utility::set_baseaccuracy( 3 ); if ( common_scripts\utility::cointoss() ) var_4.favoriteenemy = level.player; var_0 thread maps\_anim::anim_generic( var_4, "jump_down_56" ); wait 1.6; var_4 maps\_utility::anim_stopanimscripted(); wait( randomfloatrange( 0.5, 0.9 ) ); var_3++; var_2.unloaded++; if ( var_2 maps\_utility::ent_flag( "unload_interrupted" ) ) break; } } heli_missile_defense_init( var_0 ) { self endon( "death" ); self.flareprotection = 1; if ( isdefined( var_0 ) ) level.javelintargets[level.javelintargets.size] = self; for (;;) { self waittill( "missile_targeted", var_1 ); common_scripts\utility::waitframe(); var_2 = undefined; if ( isdefined( var_1.islaserguidedmissile ) ) var_2 = 1000; else { var_2 = 600; javelin_check_decent( var_1 ); } while ( isvalidmissile( var_1 ) ) { if ( common_scripts\utility::distance_2d_squared( self.origin, var_1.origin ) < squared( var_2 ) ) break; wait 0.05; } if ( !isdefined( var_1 ) || !isvalidmissile( var_1 ) ) continue; thread shootflares(); while ( !isdefined( self.flares ) ) wait 0.05; wait 0.4; if ( !isdefined( var_1 ) || !isvalidmissile( var_1 ) ) continue; var_3 = common_scripts\utility::random( self.flares ); var_3.mytarget = var_1; var_1 missile_settargetent( var_3 ); var_1 notify( "targeting_flare" ); if ( isdefined( var_1.islaserguidedmissile ) && var_1.islaserguidedmissile == 1 ) var_1 notify( "guided_missile_stop_logic" ); while ( isvalidmissile( var_1 ) ) { if ( distancesquared( var_3.origin, var_1.origin ) < squared( 400 ) ) break; wait 0.05; } var_4 = common_scripts\utility::getfx( "chopper_flare_explosion" ); if ( isdefined( var_1 ) && isvalidmissile( var_1 ) ) var_1 delete(); playfx( var_4, var_3.origin ); var_3 delete(); if ( isdefined( self.flareammo ) ) { self.flareammo--; if ( self.flareammo == 0 ) break; } } self.flareprotection = undefined; } shootflares( var_0 ) { self notify( "shooting_flares" ); var_1 = "tag_flare"; if ( isdefined( var_0 ) ) var_1 = var_0; var_2 = maps\_utility::spawn_anim_model( "flare_rig" ); var_2.origin = self gettagorigin( var_1 ); var_3 = anglestoforward( self.angles ); var_2.angles = vectortoangles( var_3 ); var_4 = []; var_5 = [ "flare_right_top", "flare_left_bot", "flare_right_bot" ]; foreach ( var_7 in var_5 ) { var_8 = common_scripts\utility::spawn_tag_origin(); var_8 linkto( var_2, var_7, ( 0, 0, 0 ), ( 0, 0, 0 ) ); var_8 thread flare_trackvelocity(); var_4[var_7] = var_8; } self.flares = var_4; var_10 = level.scr_anim["flare_rig"]["flare"].size; var_11 = level.scr_anim["flare_rig"]["flare"][2]; var_2 setflaggedanim( "flare_anim", var_11, 1, 0, 1 ); var_12 = common_scripts\utility::getfx( "chopper_flare" ); var_4 = common_scripts\utility::array_randomize( var_4 ); foreach ( var_7, var_8 in var_4 ) { if ( isdefined( var_8 ) ) playfxontag( var_12, var_4[var_7], "tag_origin" ); } var_2 waittillmatch( "flare_anim", "end" ); foreach ( var_7, var_8 in var_4 ) { if ( isdefined( var_8 ) ) stopfxontag( var_12, var_4[var_7], "tag_origin" ); } var_2 delete(); var_4 = common_scripts\utility::array_removeundefined( var_4 ); common_scripts\utility::array_thread( var_4, ::flare_doburnout ); return var_4; } flare_trackvelocity() { self endon( "death" ); self.velocity = 0; var_0 = self.origin; for (;;) { self.velocity = self.origin - var_0; var_0 = self.origin; wait 0.05; } } flare_doburnout() { self endon( "death" ); self movegravity( 14 * self.velocity, 0.2 ); wait 0.2; if ( !isdefined( self ) || isdefined( self.mytarget ) ) return; self delete(); } get_helicopter_crash_location( var_0 ) { var_1 = []; foreach ( var_3 in level.helicopter_crash_locations ) { if ( isdefined( var_3.script_noteworthy ) ) { if ( var_3.script_noteworthy == var_0 ) var_1 = common_scripts\utility::array_add( var_1, var_3 ); } } if ( var_1.size == 1 ) return var_1[0]; else return var_1; } a10_strafe_run( var_0 ) { thread maps\_utility::play_sound_on_entity( "a10_strafe_roar" ); maps\_utility::delaythread( 1, maps\_utility::play_sound_on_entity, "a10_flyby_short" ); var_1 = var_0 maps\_utility::get_linked_structs(); foreach ( var_3 in var_1 ) { if ( var_3 noteworthy_check( "strafe_start_spot" ) ) { var_4 = undefined; if ( var_3 parameters_check( "cheap" ) ) var_4 = 1; a10_strafe_impacts( var_3, var_4 ); } } self notify( "strafe_done" ); } a10_strafe_impacts( var_0, var_1 ) { var_2 = common_scripts\utility::getstruct( var_0.target, "targetname" ); var_3 = var_0.radius; var_4 = vectornormalize( var_2.origin - var_0.origin ); var_5 = spawnstruct(); var_5.origin = var_0.origin; var_5.angles = vectortoangles( var_4 ); var_6 = [ var_0.origin, var_2.origin ]; var_7 = get_midpoint( var_6 ); var_7 = common_scripts\utility::drop_to_ground( var_7 ); maps\_utility::delaythread( 0.4, ::a10_strafe_impact_earthquake, var_7 ); var_8 = undefined; if ( var_0 parameters_check( "impact_loop_sound" ) ) { var_9 = var_0.script_sound; var_8 = spawn( "script_origin", var_5.origin ); maps\_utility::delaythread( 0.4, ::a10_strafe_impacts_loop_sound, var_8, var_9 ); } var_10 = 3; var_11 = undefined; while ( postion_dot_check( var_5, var_2 ) == "infront" ) { var_12 = 1; if ( maps\_utility::game_is_current_gen() ) var_12 = 1; for ( var_13 = 0; var_13 < var_12; var_13++ ) { if ( postion_dot_check( var_5, var_2 ) == "behind" ) break; var_11 = return_point_in_circle( var_5.origin, var_3 ); if ( !isdefined( var_1 ) ) { var_14 = bullettrace( var_11, ( var_11[0], var_11[1], -99999 ), 0 ); var_11 = var_14["position"]; } thread a10_strafe_impact( var_11 ); } if ( var_10 == 3 && !isdefined( var_8 ) ) { maps\_utility::delaythread( 0.4, common_scripts\utility::play_sound_in_space, "a10p_impact", var_11 ); var_10 = 0; } else if ( !isdefined( var_8 ) ) var_10++; var_15 = vectornormalize( var_11 - self gettagorigin( "tag_gun" ) ); playfx( common_scripts\utility::getfx( "a10_tracer" ), self gettagorigin( "tag_gun" ), var_15 ); playfxontag( common_scripts\utility::getfx( "a10_muzzle_flash" ), self, "tag_gun" ); self radiusdamage( var_5.origin, var_3, 9999, 9999, self ); var_5.origin = var_5.origin + var_4 * 100; wait 0.05; } wait 0.4; self notify( "strafe_done" ); earthquake( 0.65, 2, var_7, 2300 ); if ( isdefined( var_8 ) ) var_8 delete(); } a10_strafe_impact( var_0 ) { wait 0.4; playfx( common_scripts\utility::getfx( "a10_impact" ), var_0, ( 0, 0, 1 ) ); playrumbleonposition( "artillery_rumble", var_0 ); } a10_strafe_impact_earthquake( var_0 ) { self endon( "strafe_done" ); self notify( "kill_rumble_forever" ); for (;;) { earthquake( 0.75, 2, var_0, 2300 ); wait 1; } } a10_strafe_impacts_loop_sound( var_0, var_1 ) { self endon( "strafe_done" ); for (;;) var_0 maps\_utility::play_sound_on_entity( var_1 ); } a10_strafe_run_cheap( var_0 ) { self endon( "death" ); thread playloopingfx( "a10_muzzle_flash", 0.05, undefined, "tag_gun", 1 ); thread playloopingfx( "a10_tracer", 0.05, undefined, "tag_gun" ); self waittill( "stop_firing" ); self notify( "stop_looping_fx" ); thread maps\_utility::play_sound_on_entity( "a10_strafe_roar_distant" ); } a10_vista_strafe_group( var_0 ) { level endon( "stop_a10_strafe_" + var_0 ); var_1 = getentarray( var_0, "targetname" ); var_1 = common_scripts\utility::array_randomize( var_1 ); level.a10_strafe_groups[var_0] = []; var_2 = getent( var_0 + "_mig", "targetname" ); var_3 = undefined; for (;;) { foreach ( var_5 in var_1 ) { var_6 = var_5 maps\_vehicle::spawn_vehicle_and_gopath(); var_6 vehicle_turnengineoff(); level.a10_strafe_groups[var_0] = common_scripts\utility::array_removeundefined( level.a10_strafe_groups[var_0] ); level.a10_strafe_groups[var_0] = common_scripts\utility::array_add( level.a10_strafe_groups[var_0], var_6 ); if ( isdefined( var_2 ) && common_scripts\utility::cointoss() ) { var_7 = getvehiclenode( var_5.target, "targetname" ); thread a10_vista_strafe_mig( var_2, var_7 ); } else var_6 thread vehicle_path_notifications(); var_6 common_scripts\utility::waittill_any( "next_strafe", "reached_end_node", "death" ); var_3 = var_5; } var_1 = common_scripts\utility::array_remove( var_1, var_3 ); var_1 = common_scripts\utility::array_randomize( var_1 ); var_1 = common_scripts\utility::array_add( var_1, var_3 ); } } a10_vista_strafe_group_delete( var_0, var_1 ) { if ( !isdefined( level.a10_strafe_groups[var_0] ) ) { iprintln( "Trying to delete undefined strafe group" ); iprintln( "This should only happen when on a start point." ); return; } level notify( "stop_a10_strafe_" + var_0 ); if ( isdefined( var_1 ) ) maps\_utility::array_delete( common_scripts\utility::array_removeundefined( level.a10_strafe_groups[var_0] ) ); } a10_vista_strafe_mig( var_0, var_1 ) { wait( randomfloatrange( 0.5, 1 ) ); var_2 = maps\_vehicle::vehicle_spawn( var_0 ); var_2 attach_path_and_drive( var_1 ); var_2 endon( "death" ); for (;;) { var_2 notify( "stop_looping_fx" ); wait( randomfloatrange( 0.5, 1 ) ); var_2 thread playloopingfx( "a10_tracer", 0.05, undefined, "tag_body" ); wait( randomfloatrange( 1, 2 ) ); } } slamraam_think( var_0, var_1, var_2 ) { var_3 = self; var_4 = []; var_4[var_4.size] = "tag_missle1"; var_4[var_4.size] = "tag_missle2"; var_4[var_4.size] = "tag_missle3"; var_4[var_4.size] = "tag_missle4"; var_4[var_4.size] = "tag_missle5"; var_4[var_4.size] = "tag_missle6"; var_4[var_4.size] = "tag_missle7"; var_4[var_4.size] = "tag_missle8"; var_3.missiletags = var_4; var_3.missiles = []; foreach ( var_6 in var_4 ) { var_7 = spawn( "script_model", ( 0, 0, 0 ) ); var_7.origin = var_3 gettagorigin( var_6 ); var_7.angles = var_3 gettagangles( var_6 ); var_7 setmodel( "projectile_slamraam_missile" ); var_7 linkto( var_3, var_6 ); var_3.missiles[var_3.missiles.size] = var_7; } var_9 = anglestoforward( var_3.angles ); var_3.targetent = spawn( "script_origin", var_3.origin + var_9 * 50 + ( 0, 0, 115 ) ); var_3 setturrettargetent( var_3.targetent ); if ( isdefined( var_0 ) && var_0 == 1 ) var_3 thread slamraam_fire_missiles( var_0, var_1, var_2 ); } slamraam_fire_missiles( var_0, var_1, var_2 ) { var_3 = self; var_3 endon( "stop_firing" ); var_4 = var_3.missiletags; if ( !isdefined( var_1 ) ) { var_1[0] = 0.4; var_1[1] = 0.8; } for (;;) { foreach ( var_8, var_6 in var_4 ) { if ( isdefined( var_3.missiles[var_8] ) ) continue; var_7 = spawn( "script_model", ( 0, 0, 0 ) ); var_7.origin = var_3 gettagorigin( var_6 ); var_7.angles = var_3 gettagangles( var_6 ); var_7 setmodel( "projectile_slamraam_missile" ); var_7 linkto( var_3 ); var_3.missiles[var_3.missiles.size] = var_7; } var_9 = common_scripts\utility::array_randomize( var_3.missiles ); wait( randomfloatrange( 0.2, 1.2 ) ); foreach ( var_8, var_11 in var_9 ) { var_3 slamraam_fire_missile( var_4[var_8], var_11, var_2 ); wait( randomfloatrange( var_1[0], var_1[1] ) ); } if ( !isdefined( var_0 ) ) break; wait( randomintrange( 1, 4 ) ); } } slamraam_fire_missile( var_0, var_1, var_2 ) { var_3 = "slamraam_missile"; if ( isdefined( var_2 ) ) var_3 = var_2; var_4 = self gettagorigin( var_0 ); var_5 = self gettagangles( var_0 ); var_6 = anglestoforward( var_5 ); var_7 = var_4 + var_6 * 50000; magicbullet( var_3, var_4, var_7 ); maps\_utility::delaythread( 0.05, maps\_utility::deleteent, var_1 ); } artemis_think( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = maps\_utility::get_linked_structs(); var_1 = [ "tag_flash_left", "tag_flash_right" ]; var_2 = [ %artemis_fire_l, %artemis_fire_r ]; self.fireents = []; foreach ( var_6, var_4 in var_1 ) { var_5 = spawn( "script_origin", ( 0, 0, 0 ) ); var_5.angles = self gettagangles( var_4 ); var_5 linkto( self, var_4, ( 0, 0, 0 ), ( 0, 0, 0 ) ); var_5.tag = var_4; var_5.animation = var_2[var_6]; self.fireents = common_scripts\utility::array_add( self.fireents, var_5 ); } thread artemis_fire_think( var_0 ); common_scripts\utility::waittill_any( "death", "stop_firing_for_good" ); maps\_utility::array_delete( self.fireents ); } artemis_fire_think( var_0 ) { self notify( "new_targets" ); self endon( "new_targets" ); self endon( "stop_firing_for_good" ); self endon( "death" ); for (;;) { childthread artemis_fire(); foreach ( var_2 in var_0 ) { var_3 = var_2.origin + ( 0, 0, randomintrange( -25, 25 ) ); self setturrettargetvec( var_3 ); if ( common_scripts\utility::cointoss() ) { self notify( "stop_firing" ); common_scripts\utility::waittill_notify_or_timeout( "turret_rotate_stopped", 3 ); childthread artemis_fire(); } wait 5; } } } artemis_fire() { self notify( "stop_firing" ); self endon( "stop_firing" ); var_0 = randomintrange( 1, 4 ); var_1 = 0; for (;;) { foreach ( var_3 in self.fireents ) { if ( !isdefined( self.artemisnofiresound ) ) var_3 playsound( "weap_zpu_turret_fire" ); playfxontag( common_scripts\utility::getfx( "artemis_muzzleflash" ), self, var_3.tag ); self setanimknoballrestart( var_3.animation, %root ); if ( var_1 == var_0 ) { var_4 = anglestoforward( self gettagangles( var_3.tag ) ); var_5 = self gettagorigin( var_3.tag ) + var_4 * 400; playfx( common_scripts\utility::getfx( "artemis_tracer" ), var_5, var_4 ); var_1 = 0; var_0 = randomintrange( 1, 4 ); } else var_1++; wait 0.16; } } } hovercraft_init() { self endon( "hovercraft_delete" ); if ( !isdefined( level.hovercrafts ) ) level.hovercrafts = []; level.hovercrafts = common_scripts\utility::array_removeundefined( level.hovercrafts ); level.hovercrafts[level.hovercrafts.size] = self; maps\_utility::ent_flag_init( "hovercraft_unload_complete" ); maps\_utility::ent_flag_init( "hovercraft_continue_path" ); maps\_utility::ent_flag_init( "hovercraft_animations_done" ); maps\_utility::ent_flag_init( "hovercraft_delay_return" ); if ( !parameters_check( "engine_on" ) ) self vehicle_turnengineoff(); if ( hovercraft_set_unloaded() ) return; if ( !isdefined( level.hovercraftlanders ) ) level.hovercraftlanders = []; level.hovercraftlanders[level.hovercraftlanders.size] = self; self.cleanupents = []; thread hovercraft_anim_logic(); thread hovercraft_missile_fire(); var_0 = []; var_1 = common_scripts\utility::get_linked_ents(); foreach ( var_3 in var_1 ) { if ( var_3 maps\_vehicle::isvehicle() ) { if ( var_3 parameters_check( "starter" ) ) continue; var_0[var_0.size] = var_3; break; } } if ( var_0.size > 0 ) { hovercraft_tanks_setup( var_0 ); thread hovercraft_tanks_unload(); } if ( parameters_check( "droneUnloader" ) ) self.droneunloader = 1; if ( isdefined( self.droneunloader ) && self.droneunloader == 1 ) { maps\_utility::ent_flag_init( "hovercraft_drone_setup_complete" ); thread hovercraft_drone_setup(); maps\_utility::ent_flag_wait( "hovercraft_drone_setup_complete" ); } thread maps\_vehicle::gopath( self ); self waittill( "hovercraft_reached_beach" ); if ( hovercraft_deploy_smoke() ) wait 3; self notify( "hovercraft_unload" ); level.hovercraftlanders = common_scripts\utility::array_remove( level.hovercraftlanders, self ); if ( maps\_utility::ent_flag_exist( "hovercraft_tank_unload_complete" ) ) maps\_utility::ent_flag_wait( "hovercraft_tank_unload_complete" ); if ( maps\_utility::ent_flag_exist( "hovercraft_drone_unload_complete" ) ) maps\_utility::ent_flag_wait( "hovercraft_drone_unload_complete" ); if ( parameters_check( "nonLooper" ) ) maps\_utility::ent_flag_wait( "hovercraft_unload_complete" ); else maps\_utility::ent_flag_set( "hovercraft_unload_complete" ); maps\_utility::ent_flag_wait( "hovercraft_animations_done" ); maps\_utility::ent_flag_set( "hovercraft_continue_path" ); hovercraft_cleanup(); } hovercraft_anim_logic() { self endon( "hovercraft_delete" ); self setanim( %hovercraft_rocking ); self waittill( "hovercraft_reached_beach" ); self clearanim( %hovercraft_rocking, 0.2 ); self setanim( %hovercraft_enemy_upper_fans, 1, 0.2, 0.4 ); var_0 = 1; var_1 = 12; if ( isdefined( self.deflaterate ) ) { var_0 = self.deflaterate; var_1 = var_1 / var_0; } self.deflaterate = var_0; self setanim( %lcac_deflate, 1.0, 0.2, var_0 ); wait( var_1 ); self setflaggedanim( "anim", %lcac_deflate, 1, 0, 0 ); maps\_utility::ent_flag_wait( "hovercraft_unload_complete" ); self setanim( %hovercraft_enemy_upper_fans, 1, 0.2, 1 ); self setflaggedanim( "anim", %lcac_deflate, 1, 1, 1 ); self waittillmatch( "anim", "end" ); self setanim( %hovercraft_rocking ); maps\_utility::ent_flag_set( "hovercraft_animations_done" ); } hovercraft_missile_fire() { self endon( "hovercraft_delete" ); self endon( "death" ); var_0 = maps\_utility::get_linked_structs(); var_1 = []; foreach ( var_3 in var_0 ) { if ( var_3 parameters_check( "missile_spot" ) ) { var_4 = spawn( "script_origin", var_3.origin ); var_4 linkto( self ); var_1[var_1.size] = var_4; self.cleanupents = common_scripts\utility::array_add( self.cleanupents, var_4 ); } } var_6 = undefined; if ( isdefined( self.hovercraftmissiletimeout ) ) var_6 = self.hovercraftmissiletimeout; var_7 = "hovercraft_missile_guided"; for (;;) { self waittill( "fire_missiles" ); var_8 = self.currentnode; if ( var_8 parameters_check( "cointoss" ) ) { if ( common_scripts\utility::cointoss() ) continue; } if ( isdefined( var_8.script_sound ) ) thread maps\_utility::play_sound_on_entity( var_8.script_sound ); var_9 = 3; if ( isdefined( var_8.script_count ) ) var_9 = var_8.script_count; var_1 = common_scripts\utility::array_randomize( var_1 ); var_10 = 0; while ( var_10 <= var_9 ) { foreach ( var_12 in var_1 ) { var_10++; if ( var_10 > var_9 ) break; var_13 = var_12.origin; var_14 = anglestoforward( ( 330, 0, 0 ) ); var_15 = var_13 + var_14 * 50000; var_16 = magicbullet( var_7, var_13, var_15 ); var_17 = anglestoforward( ( 0, 0, 0 ) ); var_15 = var_13 + var_17 * 20000; var_16 common_scripts\utility::delaycall( randomfloatrange( 4, 6 ), ::missile_settargetpos, var_15 ); if ( isdefined( var_6 ) ) var_16 common_scripts\utility::delaycall( var_6, ::delete ); wait( randomfloatrange( 0.4, 0.8 ) ); } } } } hovercraft_drone_setup() { self endon( "hovercraft_delete" ); maps\_utility::ent_flag_init( "hovercraft_drone_unload_complete" ); if ( parameters_check( "infiniteDrones" ) ) self.infinitedrones = 1; var_0 = common_scripts\utility::get_linked_ents(); foreach ( var_2 in var_0 ) { if ( var_2 parameters_check( "hovercraft_drone_clip" ) ) { var_2 linkto( self, "tag_detach" ); self.droneclip = var_2; self.cleanupents = common_scripts\utility::array_add( self.cleanupents, var_2 ); } } var_4 = maps\_utility::get_linked_structs(); foreach ( var_6 in var_4 ) { if ( var_6 parameters_check( "hovercraft_drone_row" ) ) { self.dronerowstart = spawn( "script_origin", var_6.origin ); self.dronerowstart.angles = var_6.angles; self.dronerowstart linkto( self, "tag_detach" ); self.cleanupents = common_scripts\utility::array_add( self.cleanupents, self.dronerowstart ); var_7 = common_scripts\utility::getstruct( var_6.target, "targetname" ); self.dronerowend = spawn( "script_origin", var_7.origin ); self.dronerowend.origin = var_7.origin; self.dronerowend.angles = var_7.angles; self.dronerowend linkto( self, "tag_detach" ); self.cleanupents = common_scripts\utility::array_add( self.cleanupents, self.dronerowend ); } } self.fakedrones = undefined; maps\_utility::ent_flag_set( "hovercraft_drone_setup_complete" ); self.unloaddrones = []; self waittill( "hovercraft_unload" ); if ( !isdefined( level.hovercraftdroneunloader ) ) level.hovercraftdroneunloader = 0; level.hovercraftdroneunloader++; hovercraft_unloader_init(); if ( isdefined( self.fronttank ) ) self.fronttank maps\_utility::ent_flag_wait( "hovercraft_unload_complete" ); else if ( isdefined( self.fakedrones ) ) { maps\_utility::array_delete( self.fakedrones ); self.fakedrones = undefined; } var_9 = 4; if ( isdefined( self.infinitedrones ) ) var_9 = 1; else if ( isdefined( self.script_drone_repeat_count ) ) var_9 = self.script_drone_repeat_count; var_10 = randomfloatrange( 0.5, 1.4 ); var_11 = 5; var_12 = undefined; if ( isdefined( self.backtank ) ) var_12 = 1; while ( var_9 != 0 ) { if ( isdefined( self.stopdroneunload ) ) break; common_scripts\utility::flag_wait( "player_not_doing_strafe" ); hovercraft_load_drones(); wait( var_10 ); hovercraft_dday_runout(); wait( var_11 ); self.script_drones_max = 5; if ( !isdefined( self.infinitedrones ) ) var_9--; var_10 = 0; var_11 = 3; if ( isdefined( var_12 ) ) { if ( isdefined( self.delaytankunload ) ) continue; var_12 = undefined; maps\_utility::ent_flag_wait( "hovercraft_tank_unload_complete" ); wait 2; } } maps\_utility::ent_flag_set( "hovercraft_drone_unload_complete" ); self notify( "drone_runout_done" ); } hovercraft_unloader_init() { common_scripts\utility::waitframe(); var_0 = self.currentnode; self.dronepathstarts = []; self.dronefightspots = []; if ( isdefined( var_0.script_drones_max ) ) self.script_drones_max = var_0.script_drones_max; var_1 = var_0 common_scripts\utility::get_linked_ents(); var_2 = var_0 maps\_utility::get_linked_structs(); var_3 = common_scripts\utility::array_combine( var_1, var_2 ); foreach ( var_5 in var_3 ) { if ( isspawner( var_5 ) ) { self.dronespawner = var_5; continue; } if ( isentity( var_5 ) ) var_5 linkto( self, "tag_detach" ); if ( !isdefined( var_5.script_noteworthy ) ) continue; switch ( var_5.script_noteworthy ) { case "hovercraft_drone_pathstarts": self.dronepathstarts[self.dronepathstarts.size] = var_5; break; } } } hovercraft_load_drones() { var_0 = spawnstruct(); var_0.origin = self.dronerowstart.origin; var_0.angles = self.dronerowstart.angles; var_1 = self.dronerowend; var_2 = anglestoforward( var_0.angles ) * -1; var_3 = anglestoright( var_0.angles ); var_4 = 7; if ( isdefined( self.dronerowsamount ) ) var_4 = self.dronerowsamount; if ( !isdefined( self.script_drones_max ) ) self.script_drones_max = 5; self.dronerows = []; var_5 = 0; var_6 = []; for ( var_7 = maps\homecoming_drones::drones_request( self.script_drones_max ); var_6.size < var_7; var_5++ ) { var_8 = spawnstruct(); var_8.origin = var_0.origin; var_8.origin = var_0.origin + var_3 * randomintrange( 10, 40 ); self.dronerows[var_5] = []; while ( postion_dot_check( var_1, var_8 ) == "behind" ) { if ( var_6.size >= var_7 ) return; var_9 = self.dronerows[var_5].size; var_10 = self.dronespawner maps\_utility::spawn_ai(); var_10 thread maps\homecoming_drones::drones_death_watcher(); var_10.origin = var_8.origin; var_10.angles = var_0.angles; var_10 linkto( self, "tag_detach" ); var_6 = common_scripts\utility::array_add( var_6, var_10 ); self.unloaddrones = common_scripts\utility::array_add( self.unloaddrones, var_10 ); self.dronerows[var_5][var_9] = var_10; var_10.script_linkname = undefined; var_11 = randomintrange( 40, 80 ); var_8.origin = var_8.origin + var_3 * var_11; if ( var_6.size >= self.script_drones_max ) return; } var_0.origin = var_0.origin + var_2 * 24; } } hovercraft_load_fake_drones() { var_0 = spawnstruct(); var_0.origin = self.dronerowstart.origin; var_0.angles = self.dronerowstart.angles; var_1 = self.dronerowend; var_2 = anglestoforward( var_0.angles ) * -1; var_3 = anglestoright( var_0.angles ); var_4 = 0; for ( self.fakedrones = []; var_4 < 7; var_4++ ) { var_5 = spawnstruct(); for ( var_5.origin = var_0.origin + var_3 * randomintrange( 10, 40 ); postion_dot_check( var_1, var_5 ) == "behind"; var_5.origin = var_5.origin + var_3 * var_7 ) { var_6 = spawn( "script_model", var_5.origin ); var_6.angles = ( 0, 90, 0 ); var_6 setmodel( "pose_fed_army_stand_idle" ); var_6 linkto( self, "tag_detach" ); self.fakedrones[self.fakedrones.size] = var_6; var_7 = randomintrange( 40, 80 ); } var_0.origin = var_0.origin + var_2 * 24; } } hovercraft_dday_runout() { var_0 = 0; foreach ( var_2 in self.dronerows ) { var_3 = var_2.size / 2; var_3 = int( var_3 ); var_4 = var_2[var_3]; var_5 = undefined; var_6 = sortbydistance( self.dronepathstarts, var_4.origin ); foreach ( var_8 in var_6 ) { if ( postion_dot_check( var_8, var_4 ) == "behind" ) { var_5 = var_8; break; } } foreach ( var_11 in var_2 ) { if ( !isdefined( var_5 ) ) continue; var_12 = randomfloatrange( 0, 0.4 ); var_12 = var_12 + var_0; var_11 common_scripts\utility::delaycall( var_12, ::unlink ); var_11 maps\_utility::delaythread( var_12, maps\homecoming_drones::drone_animate_on_path, common_scripts\utility::getstruct( var_5.targetname, "targetname" ) ); var_11 thread maps\_utility::notify_delay( "hovercraft_runout", var_12 ); var_11 thread hovercraft_drone_random_die( var_12 + 8, 14 ); } var_0 = var_0 + randomfloatrange( 0.2, 0.4 ); } } hovercraft_ai_pathstarts() { var_0 = self.dronepathstarts[0]; var_1 = anglestoforward( var_0.angles ) * -1; self.dronepathstarts = []; var_2 = int( self.dronerows.size / 2 ); for ( var_3 = 0; var_3 < var_2; var_3++ ) { self.dronepathstarts[self.dronepathstarts.size] = var_0; iprintlnbold( "created" ); var_4 = spawnstruct(); var_4.origin = var_0.origin + var_1 * 60; var_4.angles = var_0.angles; var_4.target = var_0.targetname; var_4.targetname = "hovercraft_" + level.hovercraftdroneunloader + "_dronepathstart_" + var_3; var_0 = var_4; } } hovercraft_deploy_smoke() { var_0 = self.currentnode; var_1 = var_0 maps\_utility::get_linked_structs(); var_2 = undefined; self.hovercraftsmokeents = undefined; var_3 = 0; foreach ( var_5 in var_1 ) { if ( var_3 == 1 ) break; if ( !isdefined( var_5.targetname ) ) continue; if ( var_5.targetname == "hovercraft_drone_smoke" ) { if ( !isdefined( var_2 ) ) var_2 = []; var_2 = common_scripts\utility::array_add( var_2, var_5 ); var_3++; } } if ( !isdefined( var_2 ) ) return 0; self endon( "hovercraft_drone_unload_complete" ); self endon( "stop_deploying_smoke" ); self.hovercraftsmokeents = []; foreach ( var_8 in var_2 ) { var_9 = var_8 common_scripts\utility::spawn_tag_origin(); self.hovercraftsmokeents = common_scripts\utility::array_add( self.hovercraftsmokeents, var_9 ); playfxontag( common_scripts\utility::getfx( "hovercraft_smoke" ), var_9, "tag_origin" ); } self notify( "hovercraft_smoke_deployed" ); thread hovercraft_deploy_smoke_stop(); return 1; } hovercraft_deploy_smoke_stop() { self endon( "hovercraft_delete" ); common_scripts\utility::waittill_any( "stop_deploying_smoke", "hovercraft_animations_done" ); maps\_utility::array_delete( self.hovercraftsmokeents ); self.hovercraftsmokeents = undefined; } hovercraft_drone_default( var_0 ) { if ( !isdefined( level.hovercraftdrones ) ) level.hovercraftdrones = []; level.hovercraftdrones = common_scripts\utility::array_removeundefined( level.hovercraftdrones ); level.hovercraftdrones[level.hovercraftdrones.size] = self; self.name = ""; self setlookattext( "", &"" ); self.team = "axis"; self.health = 1; if ( !isdefined( level.defaultdroneragdoll ) ) level.defaultdroneragdoll = 0; level.defaultdroneragdoll++; if ( level.defaultdroneragdoll == 6 ) { self.noragdoll = 1; level.defaultdroneragdoll = 0; } if ( !isdefined( var_0 ) ) self.drone_lookahead_value = 350; maps\homecoming_drones::give_drone_deathanim(); self.muzzleflashoverride = "drone_tracer"; self.nodroneweaponsound = 1; var_1 = [ "run_n_gun", "run", "sprint" ]; var_2 = common_scripts\utility::random( var_1 ); if ( var_2 == "sprint" ) maps\_utility::set_moveplaybackrate( 1.3 ); else if ( var_2 == "run_n_gun" ) { if ( common_scripts\utility::cointoss() ) var_2 = "run"; else thread func_waittill_msg( self, "hovercraft_runout", maps\homecoming_drones::drone_fire_randomly_loop ); } self.runanim = level.drone_anims[self.team]["stand"][var_2]; } hovercraft_drone_random_die( var_0, var_1 ) { self endon( "death" ); self endon( "drone_random_death" ); wait( randomfloatrange( var_0, var_1 ) ); maps\_utility::die(); } hovercraft_tanks_setup( var_0 ) { var_1 = []; foreach ( var_4, var_3 in var_0 ) var_1[var_4] = maps\_vehicle::vehicle_spawn( var_3 ); self.tanks = var_1; maps\_utility::ent_flag_init( "hovercraft_allow_tank_unload" ); maps\_utility::ent_flag_init( "hovercraft_tank_unload_complete" ); var_5 = [ "front", "back" ]; var_6 = [ "TAG_TANK_FORWARD", "TAG_TANK_BACK" ]; var_7 = [ "lcac_tank_exit_01", "lcac_tank_exit_02" ]; foreach ( var_4, var_9 in var_1 ) { var_9 maps\_utility::ent_flag_init( "hovercraft_unload_complete" ); var_9 vehicle_turnengineoff(); var_9.lights = undefined; var_10 = var_9 vehicle_to_model(); if ( isdefined( var_9.script_parameters ) ) { if ( var_9 parameters_check( "front" ) ) { var_10.tag = "TAG_TANK_FORWARD"; var_10.unloadanim = "lcac_tank_exit_01"; self.fronttank = var_9; } else if ( var_9 parameters_check( "back" ) ) { var_10.tag = "TAG_TANK_BACK"; var_10.unloadanim = "lcac_tank_exit_02"; self.backtank = var_9; } } if ( !isdefined( var_10.tag ) ) { var_10.tag = var_6[var_4]; var_10.unloadanim = var_7[var_4]; } var_10 linkto( self, var_10.tag, ( 0, 0, 0 ), ( 0, 0, 0 ) ); maps\_vehicle::gopath( var_9 ); } } hovercraft_tanks_unload( var_0 ) { self waittill( "hovercraft_unload" ); common_scripts\utility::waitframe(); if ( parameters_check( "delayTankUnload" ) ) self.delaytankunload = 1; if ( isdefined( self.delaytankunload ) ) { maps\_utility::ent_flag_wait( "hovercraft_allow_tank_unload" ); self.delaytankunload = undefined; } foreach ( var_6, var_2 in self.tanks ) { var_3 = var_2.fakemodel; thread maps\_anim::anim_generic( var_3, var_3.unloadanim, var_3.tag ); var_4 = maps\_utility::getanim_generic( var_3.unloadanim ); var_3 setflaggedanim( "single anim", var_4, 1, 0, self.deflaterate ); var_5 = getanimlength( var_4 ); var_5 = var_5 / self.deflaterate; maps\_utility::delaythread( var_5, ::hovercraft_tanks_unload_logic, var_2, var_3 ); } foreach ( var_2 in self.tanks ) var_2 maps\_utility::add_wait( maps\_utility::ent_flag_wait, "hovercraft_unload_complete" ); maps\_utility::do_wait(); self notify( "unloaded" ); maps\_utility::ent_flag_set( "hovercraft_tank_unload_complete" ); } hovercraft_tanks_unload_logic( var_0, var_1 ) { var_0 model_to_vehicle(); var_0 maps\_utility::ent_flag_set( "hovercraft_unload_complete" ); } hovercraft_set_unloaded() { if ( !parameters_check( "unloaded" ) ) return 0; self setanim( %lcac_deflate ); self setanimtime( %lcac_deflate, 0.5 ); self setflaggedanim( "single anim", %lcac_deflate, 1, 0, 0 ); thread hovercraft_deploy_smoke(); thread hovercraft_unloaded_leave(); return 1; } hovercraft_unloaded_leave() { self endon( "death" ); maps\_utility::ent_flag_wait( "hovercraft_unload_complete" ); self notify( "stop_deploying_smoke" ); self setanim( %hovercraft_enemy_upper_fans, 1, 0.2, 1 ); self setflaggedanim( "anim", %lcac_deflate, 1, 1, 1 ); self waittillmatch( "anim", "end" ); self setanim( %hovercraft_rocking ); maps\_utility::ent_flag_set( "hovercraft_continue_path" ); } hovercraft_cleanup() { if ( isdefined( self.cleanupents ) ) { self.cleanupents = common_scripts\utility::array_removeundefined( self.cleanupents ); maps\_utility::array_delete( self.cleanupents ); } } hovercraft_delete() { self notify( "hovercraft_delete" ); if ( isdefined( self.fakedrones ) ) maps\_utility::array_delete( self.fakedrones ); if ( isdefined( self.hovercraftsmokeents ) ) maps\_utility::array_delete( self.hovercraftsmokeents ); if ( isdefined( self.unloaddrones ) ) { var_0 = maps\_utility::array_removedead( self.unloaddrones ); maps\_utility::array_delete( var_0 ); } hovercraft_cleanup(); self delete(); } hovercraft_allow_death() { var_0 = common_scripts\utility::get_linked_ents(); self.weaponclip = undefined; foreach ( var_2 in var_0 ) { if ( var_2 parameters_check( "weaponclip" ) ) { var_2 setcandamage( 1 ); var_2 linkto( self, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); self.weaponclip = var_2; break; } } for (;;) { self.weaponclip waittill( "damage", var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12, var_13 ); if ( !isplayer( var_5 ) ) continue; if ( var_13 == "a10_30mm_player_homecoming" ) self.fakehealth = self.fakehealth - 200; if ( self.fakehealth <= 0 ) break; } maps\_vehicle::godoff(); self notify( "death" ); } ship_artillery_init( var_0 ) { var_1 = common_scripts\utility::getstructarray( var_0, "targetname" ); var_2 = []; foreach ( var_4 in var_1 ) { var_5 = var_4.script_index; var_2[var_5] = var_4; } level.shipartilleryspots = var_2; } fire_artillery( var_0, var_1 ) { var_2 = common_scripts\utility::getstruct( var_0, "targetname" ); var_3 = get_target_chain_array( var_2 ); foreach ( var_5 in var_3 ) { if ( isdefined( var_5.script_delay ) ) var_5 maps\_utility::script_delay(); thread fire_artillery_shell( level.shipartilleryspots[var_5.script_index], var_5, var_1 ); } } fire_artillery_shell( var_0, var_1, var_2 ) { playfx( common_scripts\utility::getfx( "battleship_artillery_flash" ), var_0.origin, anglestoforward( ( 0, 0, 0 ) ) ); maps\_utility::delaythread( 0.5, common_scripts\utility::play_sound_in_space, "artillery_fire_distant", var_0.origin ); wait 2; var_3 = 1.1; var_4 = create_artillery_shell( var_0 ); var_4 moveto( var_1.origin, var_3, 0.7, 0 ); var_5 = ( var_1.origin[0], var_1.origin[1], var_4.wake.origin[2] ); var_4.wake moveto( var_5, var_3, 0.7, 0 ); thread artillery_shell_wake_watcher( var_4 ); thread common_scripts\utility::play_sound_in_space( "artillery_incoming", var_1.origin ); var_4 thread playloopingfx( "artillery_trail_2" ); var_4 waittill( "movedone" ); if ( isdefined( var_1.script_flag_set ) ) common_scripts\utility::flag_set( var_1.script_flag_set ); if ( isdefined( var_1.script_noteworthy ) ) level notify( var_1.script_noteworthy, var_1 ); var_6 = var_1 maps\_utility::get_linked_structs(); foreach ( var_8 in var_6 ) { if ( var_8 parameters_check( "sandbag" ) ) thread explosion_throw_sandbags( var_8 ); } thread common_scripts\utility::play_sound_in_space( "artillery_explosion", var_1.origin ); if ( !var_1 parameters_check( "no_explosion" ) ) { if ( isdefined( var_2 ) ) { artillery_player_mg_check(); thread artillery_player_slide( var_1 ); if ( distance2d( level.player.origin, var_1.origin ) < 200 ) level.player shellshock( "homecoming_artillery_close", 5 ); else level.player shellshock( "homecoming_artillery_far", 5 ); level.player thread artillery_disableweapons(); level.player viewkick( 25, var_1.origin ); } earthquake( 0.4, randomfloatrange( 1.5, 2 ), var_1.origin, 10000 ); var_10 = anglestoforward( ( 0, 0, 0 ) ); var_11 = "artillery_explosion_player"; if ( isdefined( var_1.script_fxid ) ) { var_11 = var_1.script_fxid; if ( isdefined( var_1.angles ) ) var_10 = anglestoforward( var_1.angles ); } playfx( common_scripts\utility::getfx( var_11 ), var_1.origin, var_10 ); } var_4 delete(); } shell_screen_effects( var_0 ) { if ( common_scripts\utility::flag( "artillery_roof_blowup" ) ) return; level.player notify( "shell_screen_effect" ); level.player endon( "shell_screen_effect" ); if ( !isdefined( level.player.shellscreeneffect ) ) { level.player.shellscreeneffect = maps\_hud_util::create_client_overlay( "black", 0, level.player ); level.player.lastshelleffecttime = 0; } var_1 = var_0.origin; playrumbleonposition( "artillery_rumble", var_1 ); var_2 = common_scripts\utility::distance_2d_squared( level.player.origin, var_1 ); if ( var_2 > squared( 1000 ) ) return; if ( level.player.health > 50 ) level.player dodamage( 100, level.player.origin ); level.player shellshock( "homecoming_bunker", 0.4 ); level.player thread maps\_gameskill::grenade_dirt_on_screen( "left" ); level.player.lastshelleffecttime = gettime(); var_3 = 0.25; thread maps\_utility::set_blur( randomintrange( 3, 5 ), 0.25 ); level.player.shellscreeneffect thread maps\_hud_util::fade_over_time( 0.1, 0.25 ); wait 0.25; thread maps\_utility::set_blur( 0, 0.25 ); level.player.shellscreeneffect thread maps\_hud_util::fade_over_time( 0, 0.4 ); } create_artillery_shell( var_0 ) { var_1 = spawn( "script_model", var_0.origin ); var_1.angles = ( 0, 0, 0 ); var_1 setmodel( "tag_origin" ); var_1.wake = spawn( "script_model", var_1.origin - ( 0, 0, 690 ) ); var_1.wake.angles = ( 0, 0, 0 ); var_1.wake setmodel( "tag_origin" ); playfxontag( common_scripts\utility::getfx( "artillery_tracer" ), var_1, "tag_origin" ); playfxontag( common_scripts\utility::getfx( "artillery_trail" ), var_1, "tag_origin" ); playfxontag( common_scripts\utility::getfx( "artillery_mist" ), var_1.wake, "tag_origin" ); return var_1; } artillery_shell_wake_watcher( var_0 ) { while ( isdefined( var_0 ) ) { if ( var_0.origin[0] > -7000 ) break; wait 0.05; } var_0.wake delete(); } artillery_player_slide( var_0 ) { level.player notify( "new_artillery_slide" ); level.player endon( "new_artillery_slide" ); if ( !isdefined( level.player.slidemodel ) ) { var_1 = spawn( "script_origin", level.player.origin ); var_1.angles = level.player.angles; level.player.slidemodel = var_1; level.player playerlinkto( var_1 ); var_2 = anglestoforward( level.player.angles ); var_1 moveslide( ( 0, 0, 0 ), 15, var_2 ); level.player thread maps\_utility_code::doslide( var_1, 10, 0.1 ); } var_1 = level.player.slidemodel; var_2 = vectornormalize( level.player.origin - var_0.origin ); var_2 = ( 0, var_2[1], var_2[2] ); var_1 moveslide( ( 0, 0, 15 ), 15, var_2 * 500 ); maps\_utility::wait_for_flag_or_timeout( "FLAG_artillery_sequence_done", 5 ); if ( common_scripts\utility::flag( "FLAG_artillery_sequence_done" ) ) wait 0.5; level.player notify( "stop_sliding" ); level.player unlink(); level.player.slidemodel delete(); } artillery_player_mg_check() { var_0 = getent( "bunker_turret", "targetname" ); if ( common_scripts\utility::flag( "player_on_dshk_turret" ) ) { level.player notify( "turret_dismount" ); common_scripts\utility::flag_wait( "player_dismounting_turret" ); while ( common_scripts\utility::flag( "player_dismounting_turret" ) ) wait 0.05; } } artillery_disableweapons() { level.player notify( "new_artillery_hit" ); level.player endon( "new_artillery_hit" ); level.player disableweapons(); wait( randomfloatrange( 1, 2 ) ); level.player enableweapons(); } explosion_throw_sandbags( var_0, var_1, var_2, var_3 ) { var_4 = common_scripts\utility::getstruct( var_0.target, "targetname" ); var_5 = int( distance2d( var_0.origin, var_4.origin ) ); var_6 = vectornormalize( var_4.origin - var_0.origin ); var_7 = common_scripts\utility::getstruct( var_0.script_linkto, "script_linkname" ); var_8 = undefined; var_9 = undefined; var_10 = undefined; if ( isdefined( var_7.target ) ) { var_11 = common_scripts\utility::getstruct( var_7.target, "targetname" ); var_8 = int( distance2d( var_7.origin, var_11.origin ) ); var_9 = vectornormalize( var_11.origin - var_7.origin ); } else var_10 = vectornormalize( var_7.origin - var_0.origin ); var_12 = [ "ac_prs_imp_mil_sandbag_desert_single_flat", "ac_prs_imp_mil_sandbag_desert_single_bent" ]; if ( !isdefined( var_1 ) ) var_1 = randomintrange( 10, 15 ); for ( var_13 = 0; var_13 < var_1; var_13++ ) { var_14 = randomintrange( 0, var_5 ); var_15 = var_0.origin + var_6 * var_14; var_16 = spawn( "script_model", var_15 ); var_16 setmodel( common_scripts\utility::random( var_12 ) ); if ( isdefined( var_8 ) ) { var_14 = randomintrange( 0, var_8 ); var_15 = var_7.origin + var_9 * var_14; var_10 = vectornormalize( var_15 - var_16.origin ); } if ( getdvarint( "daniel" ) == 1 ) thread maps\_utility::draw_line_until_notify( var_16.origin, var_15, 0, 0, 1, level.player, "STOPPPP" ); if ( !isdefined( var_2 ) ) var_2 = randomfloatrange( 30000, 35000 ); var_16 physicslaunchclient( var_16.origin, var_10 * var_2 ); var_16 maps\_utility::delaythread( randomintrange( 5, 10 ), maps\_utility::self_delete ); if ( isdefined( var_3 ) ) { wait( var_3 ); continue; } if ( common_scripts\utility::cointoss() ) wait 0.05; } } ambient_smallarms_fire( var_0, var_1, var_2, var_3, var_4 ) { if ( isdefined( var_1 ) ) level endon( var_1 ); if ( isstring( var_0 ) ) var_0 = common_scripts\utility::getstruct( var_0, "targetname" ); var_5 = "drone_tracer"; if ( isdefined( var_4 ) ) var_5 = var_4; var_6 = 0.05; if ( isdefined( var_2 ) ) var_6 = var_2; var_7 = 0.1; if ( isdefined( var_3 ) ) var_7 = var_3; var_8 = common_scripts\utility::getstruct( var_0.target, "targetname" ); for (;;) { var_9 = return_point_in_circle( var_0.origin, var_0.radius, var_0.height ); var_10 = return_point_in_circle( var_8.origin, var_8.radius, var_8.height ); var_11 = vectornormalize( var_10 - var_9 ); playfx( common_scripts\utility::getfx( var_5 ), var_9, var_11 ); wait( randomfloatrange( var_6, var_7 ) ); } } init_ambient_distant_battlechatter() { level.distant_battlechatter = []; level.distant_battlechatter["us"] = []; level.distant_battlechatter["sp"] = []; var_0 = [ "US_0_inform_attack_grenade_d", "US_0_inform_killfirm_infantry_d", "US_0_inform_reloading_generic_d", "US_0_inform_taking_fire_d", "US_0_order_move_combat_d", "US_0_reaction_casualty_generic_d", "US_1_inform_attack_grenade_d", "US_1_inform_killfirm_infantry_d", "US_1_inform_taking_fire_d", "US_1_inform_reloading_generic_d" ]; var_1 = []; foreach ( var_3 in var_0 ) var_1[var_1.size] = var_3; level.distant_battlechatter["us"] = var_1; var_0 = [ "SP_0_grenade_incoming_d", "SP_0_inform_killfirm_infantry_d", "SP_0_inform_reloading_generic_d", "SP_0_inform_taking_fire_d", "SP_0_order_move_combat_d", "SP_0_reaction_casualty_generic_d", "SP_1_inform_killfirm_infantry_d", "SP_1_inform_attack_grenade_d", "SP_1_inform_reloading_generic_d", "SP_1_inform_taking_fire_d" ]; var_1 = []; foreach ( var_3 in var_0 ) var_1[var_1.size] = var_3; level.distant_battlechatter["sp"] = var_1; } ambient_distant_battlechatter( var_0, var_1, var_2 ) { level notify( "new_distant_battlechatter" ); level endon( "new_distant_battlechatter" ); if ( isdefined( var_1 ) ) level endon( var_1 ); if ( isstring( var_0 ) ) var_0 = common_scripts\utility::getstructarray( var_0, "targetname" ); if ( isdefined( var_2 ) ) { foreach ( var_4 in var_0 ) { if ( var_4.script_noteworthy == var_2 ) var_0 = common_scripts\utility::array_remove( var_0, var_4 ); } } for (;;) { wait( randomfloatrange( 2, 5 ) ); var_4 = var_0[randomint( var_0.size )]; var_6 = var_4.script_noteworthy; var_7 = level.distant_battlechatter[var_6]; var_8 = var_7[randomint( var_7.size )]; common_scripts\utility::play_sound_in_space( var_8, var_4.origin ); } } destructible_dragons_teeth() { var_0 = self; var_0 destructible_setup( 1000 ); for (;;) { var_0 waittill( "damage", var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 ); if ( !isdefined( var_10 ) ) continue; if ( !isplayer( var_2 ) ) continue; var_10 = tolower( var_10 ); if ( var_10 != "chaingun_turret" ) continue; var_0.currenthealth = var_0.currenthealth - var_1; if ( var_0.currenthealth <= 0 ) { playfx( common_scripts\utility::getfx( "dragons_teeth_concrete_fx" ), var_0.origin, var_3 * -1 ); var_11 = undefined; if ( isdefined( var_0.target ) ) var_11 = getent( var_0.target, "targetname" ); var_0 delete(); if ( !isdefined( var_11 ) ) return; var_11 destructible_setup( 1000 ); var_0 = var_11; } } } destructible_sandbags() { var_0 = self; var_0 destructible_setup( 2000 ); var_1 = common_scripts\utility::getstruct( var_0.target, "targetname" ); var_2 = var_0 common_scripts\utility::get_linked_ent(); var_3 = getnode( var_0.target, "targetname" ); for (;;) { var_0 waittill( "damage", var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12, var_13 ); if ( !isdefined( var_13 ) ) continue; if ( !isplayer( var_5 ) ) continue; var_13 = tolower( var_13 ); if ( var_13 != "chaingun_turret" ) continue; var_0.currenthealth = var_0.currenthealth - var_4; if ( var_0.currenthealth <= 0 ) { playfx( common_scripts\utility::getfx( "destructible_sandbags_fx" ), var_0.origin ); thread explosion_throw_sandbags( var_1, randomintrange( 4, 6 ), 20000, randomfloatrange( 0.05, 0.1 ) ); var_0.origin = var_0.origin + ( 0, 0, -13 ); break; } else { thread explosion_throw_sandbags( var_1, 1, 2000 ); var_0.origin = var_0.origin + ( 0, 0, -2 ); } } if ( isdefined( var_3 ) ) var_3 disconnectnode(); } destructible_setup( var_0 ) { self setcandamage( 1 ); self.currenthealth = var_0; } player_embers() { var_0 = common_scripts\utility::spawn_tag_origin(); var_0 hide(); var_0.origin = level.player geteye(); var_0 linkto( level.player ); while ( !common_scripts\utility::flag( "FLAG_start_recruit_scene" ) ) { playfxontag( common_scripts\utility::getfx( "player_embers" ), var_0, "tag_origin" ); wait 0.25; } stopfxontag( common_scripts\utility::getfx( "player_embers" ), var_0, "tag_origin" ); var_0 delete(); } debug_check_time() { var_0 = gettime(); level.player notifyonplayercommand( "BUTTON_TIMECHECK", "+attack" ); for (;;) { level.player waittill( "BUTTON_TIMECHECK" ); iprintlnbold( ( gettime() - var_0 ) / 1000 ); } } debug_ai_drone_amounts() { level.player notifyonplayercommand( "BUTTON_AI_DRONE_AMOUNT_DEBUG", "+actionslot 4" ); for (;;) { if ( !getdvarint( "daniel" ) ) { wait 0.2; continue; } level.player waittill( "BUTTON_AI_DRONE_AMOUNT_DEBUG" ); var_0 = 110; var_1 = maps\_hud_util::createfontstring( "default", 1.5 ); var_1.x = 580; var_1.y = var_0; var_0 = var_0 + 15; var_2 = maps\_hud_util::createfontstring( "default", 1.5 ); var_2.x = 580; var_2.y = var_0; var_0 = var_0 + 15; var_3 = maps\_hud_util::createfontstring( "default", 1.5 ); var_3.x = 580; var_3.y = var_0; var_0 = var_0 + 15; var_4 = maps\_hud_util::createfontstring( "default", 1.5 ); var_4.x = 580; var_4.y = var_0; var_0 = var_0 + 15; var_5 = maps\_hud_util::createfontstring( "default", 1.5 ); var_5.x = 580; var_5.y = var_0; var_0 = var_0 + 30; var_6 = maps\_hud_util::createfontstring( "default", 1.5 ); var_6.x = 580; var_6.y = var_0; var_0 = var_0 + 15; var_7 = maps\_hud_util::createfontstring( "default", 1.5 ); var_7.x = 580; var_7.y = var_0; var_0 = var_0 + 15; var_8 = maps\_hud_util::createfontstring( "default", 1.5 ); var_8.x = 580; var_8.y = var_0; var_0 = var_0 + 15; var_9 = maps\_hud_util::createfontstring( "default", 1.5 ); var_9.x = 580; var_9.y = var_0; var_0 = var_0 + 15; var_10 = maps\_hud_util::createfontstring( "default", 1.5 ); var_10.x = 580; var_10.y = var_0; thread debug_ai_drone_amounts_logic( var_1, var_3, var_2, var_4, var_5 ); thread ent_count_check( var_6, var_7, var_8, var_9, var_10 ); level.player waittill( "BUTTON_AI_DRONE_AMOUNT_DEBUG" ); level notify( "stop_ai_drone_debug" ); var_3 destroy(); var_2 destroy(); var_4 destroy(); var_1 destroy(); var_5 destroy(); var_6 destroy(); var_7 destroy(); var_8 destroy(); var_9 destroy(); var_10 destroy(); } } debug_ai_drone_amounts_logic( var_0, var_1, var_2, var_3, var_4 ) { level endon( "stop_ai_drone_debug" ); var_5 = var_1.color; for (;;) { var_6 = level.vehicles["allies"]; var_6 = common_scripts\utility::array_combine( var_6, level.vehicles["axis"] ); var_7 = getaiarray(); var_8 = []; var_9 = [ level.drones["allies"], level.drones["axis"], level.drones["team3"], level.drones["neutral"] ]; foreach ( var_11 in var_9 ) var_8 = common_scripts\utility::array_combine( var_8, var_11.array ); var_0 settext( "Vehicles : " + var_6.size ); var_2 settext( "AI : " + var_7.size ); var_1 settext( "Drones : " + var_8.size ); var_3 settext( "Available : " + level.availabledrones ); var_4 settext( "Total : " + ( level.availabledrones + var_8.size ) ); if ( var_8.size > 50 ) var_1.color = ( 1, 0, 0 ); else var_1.color = var_5; wait 0.05; } } ent_count_check( var_0, var_1, var_2, var_3, var_4 ) { level endon( "stop_ai_drone_debug" ); var_5 = 0; var_6 = 50; var_7 = 0; var_8 = 0; var_9 = 0; for (;;) { var_10 = getentarray( "script_model", "classname" ); var_11 = getentarray( "script_origin", "classname" ); var_0 settext( "models : " + var_10.size ); var_1 settext( "origins : " + var_11.size ); var_12 = var_10.size + var_11.size; var_2 settext( "total : " + var_12 ); var_7 = var_7 + var_12; var_3 settext( "average : " + var_5 ); var_8++; if ( var_8 == var_6 ) { var_5 = int( var_7 / var_6 ); var_7 = 0; var_8 = 0; } if ( var_12 > var_9 ) { var_9 = var_12; var_4 settext( "highest :" + var_9 ); } wait 0.05; } } end_of_scripting( var_0 ) { var_1 = 7; var_2 = 0; for (;;) { if ( var_2 == var_1 ) break; iprintlnbold( "end of scripting" ); if ( isdefined( var_0 ) ) iprintlnbold( var_0 ); var_2++; wait 3; } } player_push_quad( var_0, var_1, var_2, var_3 ) { level endon( var_3 ); var_2 = anglestoforward( var_2 ) * 20; for (;;) { wait 0.05; var_4 = level.player.origin; var_5 = 0; for ( var_6 = 0; var_6 < 3; var_6++ ) { if ( var_4[var_6] > var_0[var_6] && var_4[var_6] < var_1[var_6] ) { if ( var_6 == 2 ) var_5 = 1; continue; } break; } if ( var_5 ) { level.player pushplayervector( var_2 ); continue; } level.player pushplayervector( ( 0, 0, 0 ) ); } } player_kill_quad( var_0, var_1, var_2 ) { level endon( var_2 ); for (;;) { wait 0.05; var_3 = level.player.origin; var_4 = 0; for ( var_5 = 0; var_5 < 3; var_5++ ) { if ( var_3[var_5] > var_0[var_5] && var_3[var_5] < var_1[var_5] ) { if ( var_5 == 2 ) var_4 = 1; continue; } break; } if ( var_4 ) { level.player kill(); break; } } }