// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool start() { level.player maps\factory_util::move_player_to_start_point( "playerstart_rooftop" ); maps\factory_util::actor_teleport( level.squad["ALLY_ALPHA"], "rooftop_start_alpha" ); maps\factory_util::actor_teleport( level.squad["ALLY_BRAVO"], "rooftop_start_bravo" ); maps\factory_util::actor_teleport( level.squad["ALLY_CHARLIE"], "rooftop_start_charlie" ); common_scripts\utility::flag_set( "ambush_escape_clear" ); common_scripts\utility::flag_set( "spawn_loading_dock_vehicles" ); thread rooftop_heli(); maps\factory_util::safe_trigger_by_targetname( "ambush_escape_allies_rooftop" ); thread maps\factory_fx::rooftop_wind_gusts(); thread rooftop_door_breach(); thread maps\factory_chase::chase_ally_vehicle_setup(); thread maps\factory_intro::train_cleanup(); } main() { thread kill_backtrackers(); thread rooftop_fan_spin(); maps\_utility::autosave_by_name( "rooftop" ); foreach ( var_1 in level.squad ) var_1.no_pistol_switch = 1; thread rooftop_win(); level waittill( "rooftop_door_kicked" ); thread rooftop_enemy_cleanup(); thread rooftop_ally_movement_setup(); thread rooftop_enemy_retreating(); thread maps\factory_chase::car_chase_intro_car_crash_setup(); thread rooftop_staircase_threatbias(); level.squad["ALLY_ALPHA"] maps\_utility::enable_ai_color(); level.squad["ALLY_BRAVO"] maps\_utility::enable_ai_color(); level.squad["ALLY_CHARLIE"] maps\_utility::enable_ai_color(); level waittill( "rooftop_enemies_cleared" ); } section_precache() { } section_flag_init() { common_scripts\utility::flag_init( "rooftop_complete" ); common_scripts\utility::flag_init( "player_jumping" ); common_scripts\utility::flag_init( "rooftop_heli_unloaded" ); common_scripts\utility::flag_init( "rooftop_heli_okay_to_depart" ); common_scripts\utility::flag_init( "rooftop_breach_alpha_in_position" ); common_scripts\utility::flag_init( "rooftop_breach_charlie_in_position" ); common_scripts\utility::flag_init( "spotlight_off" ); common_scripts\utility::flag_init( "rooftop_door_open" ); } rooftop_fan_spin() { level endon( "rooftop_complete" ); var_0 = getent( "rooftop_fan", "targetname" ); for (;;) { var_0 rotatepitch( 360, 10 ); wait 10; } } rooftop_pipes_cleanup() { common_scripts\utility::flag_wait( "player_off_roof" ); var_0 = getentarray( "pipe_shootable", "targetname" ); foreach ( var_2 in var_0 ) { if ( isdefined( var_2 ) ) var_2 delete(); } } rooftop_enemy_waves() { common_scripts\utility::flag_wait( "player_near_rooftop_door" ); thread rooftop_enemy_surprised(); rooftop_enemy_wave_1(); thread rooftop_enemy_wave_2_upper(); thread rooftop_enemy_wave_2_lower(); thread rooftop_parking_lot_enemies(); waittillframeend; rooftop_enemies_wait_to_attack(); rooftop_last_guys_rush(); level.player.threatbias = 0; } rooftop_enemy_wave_1() { var_0 = getentarray( "rooftop_enemy_spawner_wave_1", "targetname" ); foreach ( var_2 in var_0 ) var_2 maps\_utility::spawn_ai( 1 ); } rooftop_enemy_wave_2_upper() { level endon( "player_went_lower_path" ); maps\_utility::trigger_wait_targetname( "rooftop_upper_wave_2_trigger" ); level notify( "player_went_upper_path" ); var_0 = getent( "rooftop_wave_2_trigger", "targetname" ); var_0 common_scripts\utility::trigger_off(); } rooftop_enemy_wave_2_lower() { level endon( "player_went_upper_path" ); maps\_utility::trigger_wait_targetname( "rooftop_wave_2_trigger" ); level notify( "player_went_lower_path" ); var_0 = getent( "rooftop_upper_wave_2_trigger", "targetname" ); var_0 common_scripts\utility::trigger_off(); var_0 = getent( "rooftop_enemy_fan_spawner_trigger", "targetname" ); var_0 common_scripts\utility::trigger_off(); } rooftop_parking_lot_enemies() { level waittill( "rooftop_enemies_cleared" ); thread maps\factory_parking_lot::parking_lot_blockade_vehicle_1( "blockade_vehicle_1" ); var_0 = getentarray( "parking_lot_wave_1", "targetname" ); maps\_spawner::flood_spawner_scripted( var_0 ); level waittill( "here_comes_the_truck" ); foreach ( var_2 in var_0 ) var_2 notify( "stop current floodspawner" ); } rooftop_enemies_wait_to_attack() { var_0 = getaiarray( "axis" ); foreach ( var_2 in var_0 ) var_2.dontevershoot = 1; level waittill( "rooftop_door_kicked" ); wait 1; foreach ( var_2 in var_0 ) var_2.dontevershoot = undefined; } rooftop_last_guys_rush() { for (;;) { var_0 = maps\_utility::get_living_ai_array( "rooftop_enemy", "script_noteworthy" ); if ( var_0.size <= 2 ) { maps\factory_util::safe_trigger_by_targetname( "rooftop_r_ally_move_410" ); maps\factory_util::safe_trigger_by_targetname( "p_b_ally_move_600" ); level notify( "rooftop_enemies_cleared" ); break; } wait 0.25; } } rooftop_enemy_retreating() { maps\_utility::trigger_wait_targetname( "rooftop_ally_move_406" ); var_0 = getent( "rooftop_section_1", "targetname" ); badplace_brush( "rooftop_section_1", -1, var_0, "axis" ); maps\_utility::trigger_wait_targetname( "rooftop_ally_move_408" ); var_0 = getent( "rooftop_section_2", "targetname" ); badplace_brush( "rooftop_section_2", -1, var_0, "axis" ); level waittill( "rooftop_complete" ); badplace_delete( "rooftop_section_1" ); badplace_delete( "rooftop_section_2" ); } rooftop_enemy_door_kicker() { wait 2; var_0 = maps\_utility::spawn_targetname( "rooftop_enemy_spawner_door_kicker" ); var_0.ignoreme = 1; var_0.attackeraccuracy = 100; var_0.health = 1; var_0.animname = "enemy"; var_1 = getent( "door_kicker_node", "targetname" ); var_1 thread maps\_anim::anim_single_run_solo( var_0, "rooftop_enemy_door_kick" ); thread maps\factory_audio::sfx_kicking_door_sound(); wait 2.1; var_2 = getent( "rooftop_enemy_door_blocker", "targetname" ); var_2 connectpaths(); var_2 notsolid(); thread rooftop_ally_doorway_blocker(); var_3 = getent( "rooftop_enemy_door", "targetname" ); var_3 rotateto( var_3.angles - ( 0, 175, 0 ), 0.3, 0, 0.1 ); var_0.ignoreme = 0; level.squad["ALLY_CHARLIE"].favoriteenemy = var_0; wait 0.3; var_3 rotateto( var_3.angles + ( 0, 20, 0 ), 0.7, 0, 0.1 ); } rooftop_staircase_threatbias() { level endon( "rooftop_complete" ); createthreatbiasgroup( "squad" ); maps\_utility::trigger_wait_targetname( "rooftop_stair_flank_trigger" ); level.player.threatbias = -2000; foreach ( var_1 in level.squad ) var_1 setthreatbiasgroup( "squad" ); setthreatbias( "axis", "squad", 1500 ); } rooftop_ally_movement_setup() { level endon( "rooftop_enemies_cleared" ); thread allies_jump_off_roof(); foreach ( var_1 in level.squad ) { var_1.fixednodesaferadius = 128; var_1.suppressionwait = 4200; } rooftop_ally_movement( "rooftop_section_1", "rooftop_ally_move_404" ); wait 2; rooftop_ally_movement( "rooftop_section_2", "rooftop_ally_move_406" ); var_3 = getent( "rooftop_wave_2_trigger", "targetname" ); common_scripts\utility::flag_set( "factory_rooftop_wind_gust_moment" ); maps\factory_util::safe_trigger_by_targetname( "rooftop_wave_2_trigger" ); wait 2; rooftop_ally_movement( "rooftop_section_3", "rooftop_ally_move_408" ); common_scripts\utility::flag_wait( "rooftop_heli_unloaded" ); rooftop_ally_movement( "rooftop_section_4", "rooftop_ally_move_409" ); wait 1; rooftop_ally_movement( "rooftop_section_5", "rooftop_ally_move_410" ); wait 1; rooftop_ally_movement( "rooftop_section_6", "p_b_ally_move_600" ); maps\factory_util::safe_trigger_by_targetname( "rooftop_r_ally_move_411" ); common_scripts\utility::flag_set( "rooftop_heli_okay_to_depart" ); common_scripts\utility::flag_set( "factory_rooftop_wind_gust_moment" ); level notify( "rooftop_enemies_cleared" ); } rooftop_ally_doorway_blocker() { maps\_utility::trigger_wait_targetname( "doorway_block_trigger" ); level.squad["ALLY_BRAVO"].ignoreall = 1; level.squad["ALLY_BRAVO"] clearenemy(); var_0 = getent( "rooftop_enemy_door_blocker", "targetname" ); var_0 solid(); var_0 disconnectpaths(); wait 2; level.squad["ALLY_BRAVO"].ignoreall = 0; } allies_jump_off_roof() { level waittill( "rooftop_enemies_cleared" ); level.squad["ALLY_ALPHA"] thread ally_vignette_traversal( "ally_alpha_jump_node", "factory_rooftop_jumpoff_ally01" ); level.squad["ALLY_CHARLIE"] thread ally_vignette_traversal( "ally_charlie_jump_node", "factory_rooftop_jumpoff_ally03" ); maps\factory_util::safe_trigger_by_targetname( "rooftop_r_ally_move_411" ); maps\_utility::wait_for_flag_or_timeout( "player_near_rooftop_end", 30 ); common_scripts\utility::flag_set( "rooftop_heli_okay_to_depart" ); level.squad["ALLY_BRAVO"] ally_vignette_traversal( "ally_bravo_jump_node", "factory_rooftop_jumpoff_ally02" ); foreach ( var_1 in level.squad ) var_1 thread ally_color_node_hack(); maps\factory_util::safe_trigger_by_targetname( "r_ally_move_600" ); } ally_color_node_hack() { while ( !common_scripts\utility::flag( "allies_in_loading_dock" ) ) { if ( isdefined( self.color_node ) && isalive( self.color_node.owner ) ) { self pushplayer( 1 ); self setgoalpos( self.color_node.origin ); } wait 1; } } ally_vignette_traversal( var_0, var_1 ) { level endon( "deleting_echo" ); maps\_utility::disable_pain(); self.ignoresuppression = 1; var_2 = getent( var_0, "script_noteworthy" ); var_2 maps\_anim::anim_reach_solo( self, var_1 ); var_2 maps\_anim::anim_single_run_solo( self, var_1 ); maps\_utility::enable_ai_color(); } rooftop_ally_movement( var_0, var_1 ) { level endon( "rooftop_enemies_cleared" ); var_2 = getent( var_0, "targetname" ); var_2 maps\_utility::waittill_volume_dead_or_dying(); var_3 = getent( var_1, "targetname" ); maps\factory_util::safe_trigger_by_targetname( var_1 ); waittillframeend; if ( isdefined( var_3 ) ) var_3 delete(); } rooftop_door_breach() { foreach ( var_1 in level.squad ) { var_1 maps\_utility::disable_surprise(); var_1 pushplayer( 0 ); } var_3 = []; var_3[var_3.size] = level.squad["ALLY_ALPHA"]; var_3[var_3.size] = level.squad["ALLY_CHARLIE"]; var_4 = getent( "rooftop_breach_door", "targetname" ); var_4.animname = "rooftop_breach_door"; var_4 maps\_utility::assign_animtree(); var_5 = getent( "rooftop_breach_node", "script_noteworthy" ); var_5 thread rooftop_breach_alpha_get_ready(); var_5 thread rooftop_breach_charlie_get_ready(); thread rooftop_door_breach_sight_check(); common_scripts\utility::flag_wait_all( "rooftop_breach_alpha_in_position", "rooftop_breach_charlie_in_position", "player_near_rooftop_door" ); thread rooftop_enemy_waves(); thread rooftop_dialog(); wait 0.75; var_5 notify( "stop_idle" ); level notify( "door_kick_start" ); common_scripts\utility::flag_set( "rooftop_door_open" ); var_3[var_3.size] = var_4; var_5 thread maps\_anim::anim_single( var_3, "rooftop_breach" ); waittillframeend; thread rooftop_enemy_door_kicker(); wait 3.6; level notify( "rooftop_door_kicked" ); var_6 = getent( "rooftop_door_clip", "targetname" ); var_6 connectpaths(); wait 0.3; maps\_utility::activate_trigger( "rooftop_go_trigger", "targetname" ); var_6 delete(); wait 1; foreach ( var_1 in level.squad ) var_1 maps\_utility::enable_surprise(); maps\_utility::battlechatter_on(); } rooftop_door_breach_sight_check() { level endon( "player_near_rooftop_door" ); var_0 = getent( "rooftop_door_lookat_check", "targetname" ); while ( !level.player maps\_utility::player_looking_at( var_0.origin ) ) wait 0.1; common_scripts\utility::flag_set( "player_near_rooftop_door" ); } rooftop_breach_alpha_get_ready() { var_0 = []; var_0[var_0.size] = level.squad["ALLY_ALPHA"]; maps\_anim::anim_reach_and_approach( var_0, "rooftop_breach_idle" ); thread maps\_anim::anim_loop( var_0, "rooftop_breach_idle", "stop_idle" ); common_scripts\utility::flag_set( "rooftop_breach_alpha_in_position" ); } rooftop_breach_charlie_get_ready() { var_0 = []; var_0[var_0.size] = level.squad["ALLY_CHARLIE"]; maps\_anim::anim_reach_and_approach( var_0, "rooftop_breach_idle" ); thread maps\_anim::anim_loop( var_0, "rooftop_breach_idle", "stop_idle" ); common_scripts\utility::flag_set( "rooftop_breach_charlie_in_position" ); } rooftop_enemy_surprised() { var_0 = maps\_utility::spawn_targetname( "door_breach_enemy_01" ); var_0 endon( "damage" ); level waittill( "rooftop_door_kicked" ); if ( isalive( var_0 ) ) { var_0.animname = "enemy"; var_0 thread maps\_anim::anim_single_solo( var_0, "exposed_idle_reactB" ); var_0.allowdeath = 1; wait 1.5; } if ( isalive( var_0 ) ) { var_0.attackeraccuracy = 100; level.squad["ALLY_CHARLIE"].favoriteenemy = var_0; } } rooftop_enemy_breach_kill( var_0, var_1 ) { var_2 = maps\_utility::spawn_targetname( var_0 ); var_2.animname = "enemy"; var_2 endon( "damage" ); level waittill( "rooftop_door_kicked" ); wait 0.25; if ( isalive( var_2 ) ) { var_2 maps\_anim::anim_single_solo( var_2, var_1 ); var_2 maps\_vignette_util::vignette_actor_kill(); } } rooftop_dialog() { thread rooftop_enemy_dialog(); level.squad["ALLY_ALPHA"] thread maps\_utility::smart_dialogue( "factory_mrk_okayweremovingon" ); level waittill( "door_breach_dialog" ); level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_mrk_onetwothree" ); wait 2; if ( !common_scripts\utility::flag( "spotlight_off" ) ) level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_mrk_stayoutofthe" ); common_scripts\utility::flag_wait( "factory_rooftop_wind_gust_moment" ); level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_mrk_moveandshootdo" ); level waittill( "rooftop_enemies_cleared" ); wait 1; level.squad["ALLY_CHARLIE"] maps\_utility::smart_dialogue( "factory_rgs_parkinglot" ); level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_ourrv" ); level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_whereareyou" ); maps\_utility::smart_radio_dialogue( "factory_diz_oneminute" ); level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_donthaveaminute" ); var_0 = [ "factory_bkr_cmoncmon", "factory_bkr_comeon" ]; level.squad["ALLY_ALPHA"] thread maps\factory_util::nag_line_generator( undefined, "player_off_roof", undefined, 4 ); } rooftop_enemy_dialog() { var_0 = maps\_utility::get_living_ai_array( "rooftop_enemy", "script_noteworthy" ); foreach ( var_2 in var_0 ) var_2.animname = "enemy"; var_2 = common_scripts\utility::random( var_0 ); var_2 maps\_utility::smart_dialogue( "factory_gs1_beenspotted" ); var_2 = common_scripts\utility::random( var_0 ); var_2 maps\_utility::smart_dialogue( "factory_gs1_takepositions" ); var_2 = common_scripts\utility::random( var_0 ); var_2 maps\_utility::smart_dialogue( "factory_gs1_getacharge" ); } rooftop_win() { maps\_utility::trigger_wait_targetname( "start_chase_sequence_trigger" ); level notify( "rooftop_complete" ); } rooftop_enemy_cleanup() { maps\_utility::trigger_wait_targetname( "start_chase_sequence_trigger" ); var_0 = maps\_utility::get_living_ai_array( "rooftop_enemy", "script_noteworthy" ); foreach ( var_2 in var_0 ) { if ( isdefined( var_2.magic_bullet_shield ) ) var_2 maps\_utility::stop_magic_bullet_shield(); var_2 delete(); } } rooftop_heli() { thread maps\factory_audio::rooftop_heli_distant_idle_sfx(); common_scripts\utility::flag_wait( "spawn_loading_dock_vehicles" ); var_0 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "rooftop_heli" ); var_0 maps\_vehicle::godon(); var_0 sethoverparams( 0, 0, 0 ); var_0 vehicle_turnengineoff(); var_0 hidepart( "door_L", "vehicle_nh90" ); var_0 hidepart( "door_R", "vehicle_nh90" ); var_0 hidepart( "door_L_handle", "vehicle_nh90" ); var_0 hidepart( "door_R_handle", "vehicle_nh90" ); common_scripts\utility::flag_wait( "ambush_escape_clear" ); var_0 thread spotlight_hitbox(); var_0 thread maps\factory_audio::rooftop_heli_engine_sfx(); wait 2; if ( maps\_utility::is_gen4() ) var_0 thread maps\factory_util::god_rays_from_moving_source( var_0, "tag_flash", "ambush_escape_clear", "spotlight_off", "factory_rooftop_floodlight", "factory_rooftop" ); var_0 sethoverparams( 16, 10, 3 ); var_0 thread maps\factory_fx::fx_roof_heli_spotlight(); var_0 thread maps\factory_audio::rooftop_heli_speaker_vo_sfx(); common_scripts\utility::flag_set( "music_chase_start" ); var_0 thread spotlight_heli_target_think(); var_0 thread spotlight_heli_spotlight_off(); var_0 waittill( "rooftop_heli_unload" ); var_1 = getent( "heli_spotlight_fastrope_target", "targetname" ); var_0 setturrettargetent( var_1, ( 0, 0, 0 ) ); wait 12; var_0 thread spotlight_heli_target_think(); common_scripts\utility::flag_set( "rooftop_heli_unloaded" ); common_scripts\utility::flag_wait( "rooftop_heli_okay_to_depart" ); common_scripts\utility::flag_set( "rooftop_heli_depart" ); common_scripts\utility::flag_set( "spotlight_off" ); } spotlight_heli_spotlight_off() { self waittill( "rooftop_spotlight_off" ); common_scripts\utility::flag_set( "spotlight_off" ); stopfxontag( level._effect["spotlight_model_factory"], self, "tag_flash" ); stopfxontag( level._effect["factory_spotlight_nomodel"], self, "tag_flash" ); wait 1.5; common_scripts\utility::flag_set( "rooftop_heli_okay_to_depart" ); } spotlight_heli_target_think() { self endon( "rooftop_spotlight_off" ); self endon( "rooftop_heli_unload" ); var_0 = spawn( "script_origin", level.player.origin ); var_1 = 0; var_2 = 16; var_3 = 0; var_4 = 16; var_5 = 0; var_6 = 16; self setturrettargetent( var_0, ( 0, 0, 0 ) ); vehicle_scripts\_attack_heli::heli_default_target_setup(); for (;;) { var_7 = randomintrange( var_1, var_2 ); var_8 = randomintrange( var_3, var_4 ); var_9 = randomintrange( var_5, var_6 ); if ( common_scripts\utility::cointoss() ) var_8 = var_8 * -1; if ( common_scripts\utility::cointoss() ) var_9 = var_9 * -1; if ( common_scripts\utility::cointoss() ) var_7 = var_7 * -1; var_10 = spotlight_heli_target_choice(); var_0.origin = var_10.origin + ( var_7, var_8, var_9 ); wait( randomfloatrange( 0.01, 0.1 ) ); } } thermal_disables_spotlight( var_0, var_1 ) { var_0 endon( "rooftop_spotlight_off" ); level endon( "spotlight_off" ); for (;;) { if ( level.player.thermal == 1 ) break; common_scripts\utility::waitframe(); } for (;;) { for (;;) { if ( level.player.thermal == 1 ) break; common_scripts\utility::waitframe(); } killfxontag( level._effect["spotlight_model_factory"], self, "tag_flash" ); playfxontag( level._effect["factory_spotlight_nomodel"], self, "tag_flash" ); for (;;) { if ( level.player.thermal == 0 ) break; common_scripts\utility::waitframe(); } killfxontag( level._effect["factory_spotlight_nomodel"], self, "tag_flash" ); playfxontag( level._effect["spotlight_model_factory"], self, "tag_flash" ); } } spotlight_heli_target_choice() { var_0 = level.squad; if ( !common_scripts\utility::flag( "rooftop_player_in_room" ) ) var_0[var_0.size] = level.player; var_1 = common_scripts\utility::getclosest( self.origin, var_0, 50000 ); return var_1; } spotlight_hitbox() { self endon( "rooftop_spotlight_off" ); var_0 = getent( "rooftop_spotlight_hitbox", "targetname" ); var_0.origin = self gettagorigin( "tag_flash" ); var_0 linkto( self, "tag_flash" ); var_0 setcandamage( 1 ); var_0 hide(); var_1 = 0; var_0.health = 100000; for (;;) { var_0 waittill( "damage", var_2, var_3 ); if ( var_3 == level.player ) { var_1++; if ( var_1 == 2 ) break; } wait 0.05; } common_scripts\utility::flag_set( "spotlight_off" ); var_4 = level.squad; var_4[var_4.size] = level.player; foreach ( var_6 in var_4 ) var_6.attackeraccuracy = 0.6; thread maps\factory_audio::rooftop_heli_speaker_destroy(); thread spotlight_destroyed_fx(); common_scripts\utility::flag_clear( "ambush_thermal_flashed" ); wait 0.25; if ( common_scripts\utility::flag( "rooftop_door_open" ) ) level.squad["ALLY_ALPHA"] thread maps\_utility::smart_dialogue( "factory_mrk_spotlightsouthitem" ); self notify( "rooftop_spotlight_off" ); } spotlight_destroyed_fx() { for ( var_0 = 0; var_0 < 4; var_0++ ) { playfx( level._effect["welding_sparks_funner"], self gettagorigin( "tag_flash" ) ); wait 1; } } kill_backtrackers() { level endon( "rooftop_complete" ); maps\_utility::trigger_wait_targetname( "ambush_backtrack_warning_trigger" ); thread maps\_utility::smart_radio_dialogue( "factory_mrk_adamgetbackhere" ); maps\_utility::trigger_wait_targetname( "ambush_escape_backtrack_trigger" ); level notify( "new_quote_string" ); setdvar( "ui_deadquote", &"FACTORY_FAIL_BACKTRACKING" ); playfx( level._effect["101ton_bomb"], level.player.origin ); level.player kill(); maps\_utility::missionfailedwrapper(); }