// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool defend_zodiac_pre_load() { common_scripts\utility::flag_init( "defend_zodiac" ); common_scripts\utility::flag_init( "defend_zodiac_finished" ); common_scripts\utility::flag_init( "defend_zodiac_wave_01" ); common_scripts\utility::flag_init( "defend_zodiac_wave_02" ); common_scripts\utility::flag_init( "defend_zodiac_wave_03b" ); common_scripts\utility::flag_init( "gunboats_01" ); common_scripts\utility::flag_init( "defend_osprey_online" ); common_scripts\utility::flag_init( "lower_blastshield" ); common_scripts\utility::flag_init( "gunship_attack" ); common_scripts\utility::flag_init( "defend_zodiac_ally_cleanup" ); common_scripts\utility::flag_init( "dz_respawn_friendlies" ); common_scripts\utility::flag_init( "dz_friendly_spawner_locked" ); common_scripts\utility::flag_init( "post_osprey" ); common_scripts\utility::flag_init( "start_knockdown_moment" ); common_scripts\utility::flag_init( "knockdown_moment" ); common_scripts\utility::flag_init( "osprey_intermission" ); common_scripts\utility::flag_init( "dz_deck_explode" ); common_scripts\utility::flag_init( "gunship_attack_01" ); common_scripts\utility::flag_init( "gunship_attacking" ); common_scripts\utility::flag_init( "pre_gunship_attack_vo" ); common_scripts\utility::flag_init( "destroyed_fed_destroyer_guns" ); common_scripts\utility::flag_init( "dz_warning" ); common_scripts\utility::flag_init( "hesh_close_to_knockdown" ); precacherumble( "damage_light" ); precacherumble( "damage_heavy" ); precacheshader( "overlay_static" ); precachemodel( "crr_zodiac_full" ); precachemodel( "crr_assault_rope_static" ); precachestring( &"CARRIER_CUT_ROPE_HINT" ); precachemodel( "cnd_rope_rappel_coil_04" ); precacheitem( "panzerfaust3_cheap" ); precacheitem( "panzerfaust3_player" ); maps\carrier_depth_charge::depth_charge_init(); thread maps\carrier_code::player_rain_drops(); level.zodiacs = []; level.gunboats = []; level.water_splash_trigger = getent( "water_splash_trigger", "targetname" ); level.defend_zodiac_ally_respawner = getent( "defend_zodiac_ally_respawner", "targetname" ); level.dz_intermission_enemies = []; level.dead_ally_drones = []; level.cut_ropes = []; level.zodiac_ally_shoot_targets = common_scripts\utility::getstructarray( "zodiac_ally_shoot_target", "targetname" ); level.zodiac_allies = []; level.corpse_entnums = []; level.defend_zodiac_arrived_right = getent( "defend_zodiac_arrived_right", "targetname" ); level.defend_zodiac_arrived_right maps\_utility::hide_entity(); level.defend_zodiac_arrived_catwalk = getent( "defend_zodiac_arrived_catwalk", "targetname" ); level.defend_zodiac_arrived_catwalk maps\_utility::hide_entity(); level.start_climbover = getent( "start_climbover", "targetname" ); level.start_climbover maps\_utility::hide_entity(); level.stern_corner_clean = getentarray( "stern_corner_clean", "targetname" ); level.stern_corner_dmg = getentarray( "stern_corner_dmg", "targetname" ); common_scripts\utility::array_thread( level.stern_corner_dmg, maps\_utility::hide_entity ); var_0 = getentarray( "dz_kill_triggers", "script_noteworthy" ); common_scripts\utility::array_thread( var_0, maps\_utility::hide_entity ); level.gunship_trans_triggers = getentarray( "gunship_trans_triggers", "targetname" ); common_scripts\utility::array_thread( level.gunship_trans_triggers, maps\_utility::hide_entity ); var_1 = getentarray( "anim_tugger", "targetname" ); common_scripts\utility::array_thread( var_1, maps\_utility::hide_entity ); level.dz_deck_explode_dmg = getentarray( "dz_deck_explode_dmg", "targetname" ); common_scripts\utility::array_thread( level.dz_deck_explode_dmg, maps\carrier_code::hide_and_drop_entity ); level.deck_ac130_dmg = getentarray( "deck_ac130_dmg", "targetname" ); common_scripts\utility::array_thread( level.deck_ac130_dmg, maps\carrier_code::hide_and_drop_entity ); level.deck_ac130_dmg_clip = getentarray( "deck_ac130_dmg_clip", "targetname" ); common_scripts\utility::array_thread( level.deck_ac130_dmg_clip, maps\_utility::hide_entity ); level.elevator_ac130_dmg = getentarray( "elevator_ac130_dmg", "targetname" ); common_scripts\utility::array_thread( level.elevator_ac130_dmg, maps\carrier_code::hide_and_drop_entity ); level.elevator_dmg_models = getentarray( "elevator_dmg_models", "targetname" ); common_scripts\utility::array_thread( level.elevator_dmg_models, maps\carrier_code::hide_and_drop_entity ); level.elevator_ac130_dmg_02 = getentarray( "elevator_ac130_dmg_02", "targetname" ); common_scripts\utility::array_thread( level.elevator_ac130_dmg_02, maps\carrier_code::hide_and_drop_entity ); level.fed_destroyer_osprey = getent( "fed_destroyer_osprey", "targetname" ); level.fed_destroyer_clip = getent( "fed_destroyer_clip", "targetname" ); level.destroyer_guy_nodes = getentarray( "destroyer_guy_nodes", "script_noteworthy" ); level.fed_destroyer_fx_guns = getentarray( "fed_destroyer_fx_gun", "targetname" ); level.destroyer_targets_big = []; level.fed_destroyer_guys = []; level.osprey_carrier_vol = getent( "osprey_carrier_vol", "targetname" ); level.ally_edge_nodes = getnodearray( "ally_edge_node_02", "targetname" ); level.ally_shoot_nodes = getnodearray( "ally_shoot_node_02", "targetname" ); level.cut_rope_trigger = getent( "cut_rope_trigger", "targetname" ); level.cut_rope_trigger maps\_utility::hide_entity(); } setup_defend_zodiac() { level.start_point = "defend_zodiac"; maps\carrier_code::setup_common(); maps\carrier_code::spawn_allies(); maps\_utility::set_team_bcvoice( "allies", "delta" ); maps\_utility::battlechatter_on( "allies" ); maps\_utility::flavorbursts_on( "allies" ); common_scripts\utility::flag_set( "hesh_run" ); common_scripts\utility::flag_set( "hesh_talking_finished" ); common_scripts\utility::flag_set( "deck_transition_finished" ); thread maps\carrier::obj_defend_carrier(); thread maps\carrier_audio::aud_check( "defend_zodiac" ); var_0 = getent( "blast_shield1_clip", "targetname" ); var_0 maps\_utility::show_entity(); var_1 = getent( "blast_shield2_clip", "targetname" ); var_1 maps\_utility::show_entity(); thread run_allies( 1 ); var_2 = getent( "water_wake_intro", "targetname" ); var_2 delete(); level.debug_function = ::osprey_intermission; thread run_jet_takeoff(); } begin_defend_zodiac() { common_scripts\utility::flag_set( "defend_zodiac" ); thread cleanup_deck_transition(); thread maps\carrier_code::setup_edge_lean(); thread run_defend_zodiac(); thread maps\carrier_code_zodiac::monitor_zodiac_count(); thread ally_drone_cleanup(); thread run_enemy_destroyer(); thread maps\carrier_code_zodiac::run_corpse_cleanup(); thread maps\carrier_code_zodiac::setup_cut_rope_hint(); level.zodiac_repulsor = missile_createrepulsorent( level.player, 5000, 2000 ); thread kill_trigger_setup(); setsaveddvar( "ragdoll_max_life", 100000 ); level.defend_zodiac_arrived_right maps\_utility::show_entity(); level.defend_zodiac_arrived_catwalk maps\_utility::show_entity(); thread maps\carrier_audio::aud_defend_zodiac_zone(); common_scripts\utility::flag_wait( "defend_zodiac_finished" ); missile_deleteattractor( level.zodiac_repulsor ); level.player notify( "stop_tracking_hold_use" ); thread gunship_attack_autosave(); thread spawner_cleanup(); } gunship_attack_autosave() { wait 0.5; if ( common_scripts\utility::flag( "dz_warning_right" ) || common_scripts\utility::flag( "dz_warning_front" ) || common_scripts\utility::flag( "dz_warning_rear" ) ) return; if ( level.player istouching( getent( "gunship_attack_save_vol", "targetname" ) ) ) thread maps\_utility::autosave_now(); } cleanup_deck_transition() { common_scripts\utility::flag_wait( "defend_zodiac_wave_01" ); var_0 = getaiarray( "axis" ); foreach ( var_2 in var_0 ) var_2 kill(); wait 2; var_4 = vehicle_getarray(); foreach ( var_6 in var_4 ) { if ( isdefined( var_6.classname ) && !issubstr( var_6.classname, "mig" ) ) thread maps\_utility::ai_delete_when_out_of_sight( [ var_6 ], 4000 ); } thread maps\carrier_code::phalanx_gun_offline( "crr_phalanx_03" ); thread maps\carrier_code::phalanx_gun_offline( "crr_phalanx_05" ); } catchup_defend_zodiac() { thread lower_blastshield( 0 ); thread spawner_cleanup(); common_scripts\utility::flag_set( "defend_zodiac" ); common_scripts\utility::flag_set( "post_osprey" ); common_scripts\utility::array_thread( level.deck_ac130_dmg, maps\carrier_code::show_and_raise_entity ); common_scripts\utility::array_thread( level.deck_ac130_dmg_clip, maps\_utility::show_entity ); common_scripts\utility::array_thread( level.elevator_ac130_dmg, maps\carrier_code::show_and_raise_entity ); common_scripts\utility::array_thread( level.dz_deck_explode_dmg, maps\carrier_code::show_and_raise_entity ); common_scripts\utility::array_thread( getentarray( "barrel_impact_2", "targetname" ), maps\_utility::hide_entity ); common_scripts\utility::array_thread( getentarray( "odin_phys_objects_2", "targetname" ), maps\_utility::hide_entity ); thread cleanup_enemy_destroyer(); var_0 = getentarray( "deck_combat_weapons", "targetname" ); maps\_utility::array_delete( var_0 ); common_scripts\utility::flag_set( "gunship_trans_mid" ); } run_defend_zodiac() { thread run_vignettes(); thread run_enemies(); thread run_helis(); thread run_hesh(); thread run_vo(); common_scripts\utility::flag_wait( "gunship_attack" ); gunship_attack(); } run_hesh() { common_scripts\utility::flag_wait( "hesh_run" ); level.hesh maps\_utility::delaythread( 1.5, maps\_utility::enable_exits ); level.hesh maps\_utility::disable_cqbwalk(); level.hesh maps\_utility::set_goalradius( 100 ); level.hesh maps\_utility::pathrandompercent_zero(); level.hesh maps\_utility::set_baseaccuracy( 15 ); level.hesh maps\_utility::unset_forcegoal(); level.hesh disable_flinch(); thread hesh_initial_sprint(); var_0 = common_scripts\utility::getstruct( "hesh_defend_run_1", "targetname" ); level.hesh setgoalpos( var_0.origin ); level.hesh waittill( "goal" ); var_1 = common_scripts\utility::getstruct( "hesh_defend_run_2", "targetname" ); level.hesh setgoalpos( var_1.origin ); level.hesh maps\_utility::set_goalradius( 8 ); level.hesh.ignoreall = 0; common_scripts\utility::flag_wait( "dz_deck_explode" ); wait 0.25; level.hesh maps\_anim::anim_generic_custom_animmode( level.hesh, "gravity", "run_react_stumble" ); level.hesh maps\_utility::set_ignoreall( 0 ); var_2 = common_scripts\utility::getstruct( "hesh_defend_run_jumpdown", "targetname" ); var_2 maps\_anim::anim_generic_reach( level.hesh, "traverse_jumpdown_56" ); var_2 thread maps\_anim::anim_generic( level.hesh, "traverse_jumpdown_56" ); wait 1.2; level.hesh stopanimscripted(); level.hesh maps\_utility::set_goalradius( 8 ); level.hesh maps\_utility::disable_sprint(); var_3 = getnode( "defend_zodiac_hesh_node_right", "targetname" ); var_3 maps\_anim::anim_generic_reach( level.hesh, "carrier_rappel_defend_ally_lean_enter" ); level.hesh enable_flinch(); level.hesh thread ally_edge_think( var_3 ); } hesh_initial_sprint() { common_scripts\utility::flag_wait( "defend_zodiac_arrived_right" ); var_0 = common_scripts\utility::getstruct( "defend_dot", "targetname" ); var_1 = distance( var_0.origin, level.player.origin ); var_2 = distance( var_0.origin, level.hesh.origin ); if ( var_1 <= var_2 + 200 ) level.hesh maps\_utility::enable_sprint(); } enable_flinch() { maps\_utility::enable_pain(); self.ignoreall = 0; self.ignoreme = 0; maps\_utility::set_ignoresuppression( 0 ); self.ignorerandombulletdamage = 0; self.disablebulletwhizbyreaction = 0; } disable_flinch() { maps\_utility::disable_pain(); self.ignoreall = 1; self.ignoreme = 1; maps\_utility::set_ignoresuppression( 1 ); self.ignorerandombulletdamage = 1; self.disablebulletwhizbyreaction = 1; } run_vo() { common_scripts\utility::flag_wait( "hesh_run" ); wait 5; level.hesh maps\_utility::smart_dialogue( "carrier_hsh_letsgotheyretrying" ); if ( !common_scripts\utility::flag( "defend_zodiac_arrived_right" ) ) hesh_nag_follow_vo(); wait 1; level.hesh maps\_utility::smart_dialogue( "carrier_hsh_takeoutthezodiacs" ); thread zodiac_background_sparrow_vo(); maps\_utility::smart_radio_dialogue( "carrier_wsp1_wasp1weare" ); thread zodiacs_defend_vo(); thread zodiac_defend_clear_vo(); wait 4; thread maps\_utility::smart_radio_dialogue( "carrier_ttn_osprey22is1" ); maps\_utility::smart_radio_dialogue( "carrier_ttn_beadvised10plus" ); common_scripts\utility::flag_wait( "defend_zodiac_wave_02" ); maps\_utility::smart_radio_dialogue( "carrier_com_allsquadsadditional" ); common_scripts\utility::flag_wait( "gunboats_01" ); maps\_utility::smart_radio_dialogue( "carrier_ttn_hostilegunboatsincoming" ); wait 3.5; thread maps\_utility::smart_radio_dialogue( "carrier_ttn_osprey22isready" ); wait 0.5; common_scripts\utility::flag_set( "defend_osprey_online" ); thread run_osprey_nag_first_time_vo(); thread run_osprey_start_vo(); thread run_osprey_hit_vo(); thread run_osprey_finish_vo(); common_scripts\utility::flag_wait( "defend_zodiac_osprey_turn" ); wait 1; maps\_utility::smart_radio_dialogue( "carrier_hp2_goodruncomingback" ); wait 1; thread maps\_utility::smart_radio_dialogue( "carrier_ttn_ospreyisinposition" ); common_scripts\utility::flag_wait( "osprey_intermission" ); wait 2; thread intermission_vo(); level.hesh maps\_utility::smart_dialogue( "carrier_hsh_morezodiacsincoming" ); wait 4; maps\_utility::smart_radio_dialogue( "carrier_plt1_v22isonlinemaking" ); wait 3; common_scripts\utility::flag_set( "defend_zodiac_wave_03b" ); thread maps\_utility::smart_radio_dialogue( "carrier_ttn_ospreyisreadyfor" ); common_scripts\utility::flag_wait( "defend_osprey_online" ); thread run_osprey_nag_vo(); thread run_osprey_start_2_vo(); thread run_osprey_hit_vo(); } hesh_nag_follow_vo() { level endon( "defend_zodiac_arrived_right" ); for (;;) { wait( randomfloatrange( 4, 6 ) ); level.hesh maps\_utility::smart_dialogue( "carrier_hsh_loganthisway" ); wait( randomfloatrange( 4, 6 ) ); level.hesh maps\_utility::smart_dialogue( "carrier_hsh_letsgotheyretrying" ); } } zodiacs_defend_vo() { level.player endon( "start_using_depth_charge" ); level.hesh maps\_utility::smart_dialogue( "carrier_hsh_tangosclimbingupthe" ); wait 5; level.hesh maps\_utility::smart_dialogue( "carrier_mrk_takeoutthoseropes" ); wait 4; var_0 = get_closest_ally(); if ( isdefined( var_0 ) ) var_0 maps\_utility::smart_dialogue( "carrier_us2_mandown" ); wait 2; level.hesh maps\_utility::smart_dialogue( "carrier_hsh_takeoutthezodiacs" ); wait 3; level.hesh maps\_utility::smart_dialogue( "carrier_hsh_cuttheropes" ); wait 4; level.hesh maps\_utility::smart_dialogue( "carrier_hsh_dontletthemup" ); wait 5; var_0 = get_closest_ally(); if ( isdefined( var_0 ) ) var_0 maps\_utility::smart_dialogue( "carrier_us2_clearthoseropes" ); } zodiac_defend_clear_vo() { level.player endon( "using_depth_charge" ); defend_zodiac_waittill_enemies_remaining( 1, 999 ); var_0 = get_closest_ally(); if ( isdefined( var_0 ) ) var_0 maps\_utility::smart_dialogue( "carrier_us2_ropesclear" ); } intermission_vo() { wait 3; var_0 = get_closest_ally(); if ( isdefined( var_0 ) ) var_0 maps\_utility::smart_dialogue( "carrier_us2_mandown" ); wait 4; level.hesh maps\_utility::smart_dialogue( "carrier_hsh_takeoutthezodiacs" ); } zodiac_background_sparrow_vo() { wait( randomfloatrange( 5.0, 9.0 ) ); maps\_utility::smart_radio_dialogue_overlap( "carrier_us1_sparrow1and2" ); wait( randomfloatrange( 5.0, 9.0 ) ); maps\_utility::smart_radio_dialogue_overlap( "carrier_us3_sparrow4firing" ); wait( randomfloatrange( 5.0, 9.0 ) ); maps\_utility::smart_radio_dialogue_overlap( "carrier_us2_sparrow3reloading" ); wait( randomfloatrange( 5.0, 9.0 ) ); maps\_utility::smart_radio_dialogue_overlap( "carrier_us3_sparrow4isdamaged" ); common_scripts\utility::flag_wait( "osprey_intermission" ); wait 4; maps\_utility::smart_radio_dialogue_overlap( "carrier_us2_sparrow3targetingsystems" ); wait( randomfloatrange( 5.0, 9.0 ) ); maps\_utility::smart_radio_dialogue_overlap( "carrier_us1_etaonsparrow3" ); wait( randomfloatrange( 5.0, 9.0 ) ); maps\_utility::smart_radio_dialogue_overlap( "carrier_us2_workingongettingthe" ); } run_enemies() { thread initial_climb_over(); thread initial_edge_ally_left(); thread initial_drone_allies(); waittill_kickoff_zodiac(); if ( !common_scripts\utility::flag( "dz_warning_right" ) && !common_scripts\utility::flag( "dz_warning_front" ) && !common_scripts\utility::flag( "dz_warning_rear" ) ) thread maps\_utility::autosave_now(); common_scripts\utility::flag_set( "defend_zodiac_wave_01" ); maps\_utility::delaythread( 3.5, ::initial_rpgs ); common_scripts\utility::flag_wait( "defend_zodiac_arrived_right" ); thread zodiac_initial_attack(); wait 4; defend_zodiac_waittill_enemies_remaining( 8, 17 ); thread defend_zodiac_autosave( 1 ); thread zodiac_main_wave(); wait 2; common_scripts\utility::flag_set( "defend_zodiac_wave_02" ); common_scripts\utility::flag_wait( "defend_osprey_online" ); level.player thread maps\carrier_depth_charge::depth_charge_give_control(); level.player waittill( "using_depth_charge" ); thread defend_zodiac_autosave( 1 ); maps\carrier_code_zodiac::clear_all_corpses(); thread zodiac_osprey_wave(); common_scripts\utility::flag_wait( "defend_zodiac_osprey_turn" ); maps\_utility::delaythread( 0, ::zodiac_turn_wave ); level.player waittill( "depth_charge_exit" ); maps\carrier_code_zodiac::clear_all_corpses(); thread defend_zodiac_autosave( 0, 1 ); thread osprey_intermission(); common_scripts\utility::flag_clear( "defend_osprey_online" ); thread zodiac_main_wave_2(); common_scripts\utility::flag_wait( "defend_zodiac_wave_03b" ); wait 1; level.player thread maps\carrier_depth_charge::depth_charge_give_control(); common_scripts\utility::flag_set( "defend_osprey_online" ); level.player_ignored_2nd_osprey = level.player common_scripts\utility::waittill_notify_or_timeout_return( "using_depth_charge", 60 ); if ( isdefined( level.player_ignored_2nd_osprey ) ) { level.player thread maps\carrier_depth_charge::depth_charge_remove_control(); maps\_utility::delaythread( 0, ::pre_gunship_attack_vo ); wait 2; thread cleanup_intermission_enemies(); } else { thread defend_zodiac_autosave( 1 ); maps\carrier_code_zodiac::clear_all_corpses(); thread zodiac_osprey_2_wave(); thread cleanup_intermission_enemies(); thread run_enemy_destroyer_2(); common_scripts\utility::flag_wait( "defend_zodiac_osprey_turn" ); maps\_utility::delaythread( 0, ::zodiac_turn_wave ); common_scripts\utility::flag_wait( "defend_zodiac_osprey_end_turn" ); maps\_utility::delaythread( 0, ::pre_gunship_attack_vo ); maps\_utility::delaythread( 0, ::osprey2_gunship_attack ); level.player waittill( "depth_charge_exit" ); level.player thread maps\carrier_depth_charge::depth_charge_remove_control(); maps\carrier_code_zodiac::clear_all_corpses(); thread maps\carrier_vista::clear_vista_vehicles(); } common_scripts\utility::flag_clear( "defend_osprey_online" ); common_scripts\utility::flag_set( "post_osprey" ); maps\_utility::array_delete( level.destroyer_guy_nodes ); common_scripts\utility::flag_set( "gunship_attack" ); thread lower_blastshield(); } waittill_kickoff_zodiac() { level endon( "defend_zodiac_arrived_right" ); var_0 = common_scripts\utility::getstruct( "hesh_defend_run_1", "targetname" ); var_1 = common_scripts\utility::spawn_tag_origin(); var_1.origin = var_0.origin; var_1 maps\_utility::waittill_player_lookat( 0.7, 1.5, 1 ); var_1 delete(); } initial_edge_ally_left() { var_0 = maps\_utility::spawn_targetname( "initial_edge_ally_left", 1 ); var_0.animname = "generic"; var_0.no_edge_death = 1; var_1 = getnode( "initial_edge_ally_left_node", "script_noteworthy" ); level.ally_edge_nodes = common_scripts\utility::array_remove( level.ally_edge_nodes, var_1 ); var_0 thread ally_left_death( var_1 ); common_scripts\utility::flag_wait( "defend_zodiac_wave_01" ); var_0 thread ally_edge_think( var_1 ); common_scripts\utility::waitframe(); foreach ( var_3 in level.zodiac_allies ) { if ( isdefined( var_3.mynode ) && var_3.mynode == var_1 ) { var_3 notify( "stop_edge_think" ); var_3 thread ally_node_logic(); break; } } var_0 endon( "death" ); common_scripts\utility::flag_wait( "defend_zodiac_arrived_right" ); wait 25; var_0 ally_edge_death(); } ally_left_death( var_0 ) { self waittill( "death" ); level.ally_edge_nodes = common_scripts\utility::array_add( level.ally_edge_nodes, var_0 ); } zodiac_initial_attack() { thread lookdown_zodiacs(); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_00b" ); maps\_utility::delaythread( 0.66, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_01b" ); maps\_utility::delaythread( 1.2, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_02b" ); maps\_utility::delaythread( 1.5, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_03b" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_vista_00b" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_vista_01b" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_vista_02b" ); maps\_utility::delaythread( 2, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_vista_03b" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_initial_driveby_01" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_initial_driveby_02" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_initial_driveby_03" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_10" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_11" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_12" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_13" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_14" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_15" ); thread maps\carrier_code_zodiac::spawn_fake_zodiacs( "defend_zodiac_fake_initial_01", 25 ); } lookdown_zodiacs() { common_scripts\utility::flag_wait( "lookdown_zodiacs" ); var_0 = maps\_utility::getvehiclespawnerarray( "defend_zodiac_05" ); if ( common_scripts\utility::flag( "inhibit_lookdown_zodiacs" ) ) return; foreach ( var_2 in var_0 ) { if ( player_can_see( var_2 ) ) return; } var_4 = maps\carrier_code_zodiac::spawn_zodiacs( "defend_zodiac_05" ); } player_can_see( var_0 ) { if ( sighttracepassed( level.player geteye(), var_0.origin, 0, level.player ) ) return 1; return 0; } initial_rpgs() { var_0 = common_scripts\utility::getstruct( "dz_initial_rpg_01", "targetname" ); var_1 = var_0.origin + anglestoforward( var_0.angles ) * 5000; magicbullet( "panzerfaust3_cheap", var_0.origin, var_1 ); wait 1; var_0 = common_scripts\utility::getstruct( "dz_initial_rpg_02", "targetname" ); var_1 = var_0.origin + anglestoforward( var_0.angles ) * 5000; magicbullet( "panzerfaust3_cheap", var_0.origin, var_1 ); } initial_climb_over() { level.start_climbover maps\_utility::show_entity(); var_0 = maps\_utility::spawn_targetname( "pushover_ally", 1 ); var_0 thread maps\_utility::magic_bullet_shield( 1 ); common_scripts\utility::flag_wait( "start_climbover" ); var_1 = climb_over( "climbover_03", undefined, 0, 1 ); var_2 = climb_over( "climbover_04", 2, 100 ); var_1.allowdeath = 0; var_0.push_enemy = var_1; var_0 ally_push(); var_0 thread maps\_anim::anim_generic_loop( var_0, "carrier_rappel_defend_ally_lean_shoot_long" ); wait 4; var_0 notify( "stop_loop" ); if ( isalive( var_0 ) ) { if ( isdefined( var_0.magic_bullet_shield ) ) var_0 maps\_utility::stop_magic_bullet_shield(); var_0 ally_edge_death(); } } climb_over( var_0, var_1, var_2, var_3 ) { if ( !isdefined( var_1 ) ) var_1 = 0; var_4 = common_scripts\utility::getstruct( var_0 + "_rappel", "targetname" ); var_5 = maps\carrier_code_zodiac::setup_rope( var_4 ); var_5 thread maps\carrier_code_zodiac::shoot_rope( var_4, 1 ); var_6 = var_1 + 2; var_5 thread maps\_utility::notify_delay( "rappel_done", var_6 ); var_7 = getent( var_0, "targetname" ); var_8 = maps\_utility::spawn_targetname( var_0, 1 ); var_8.spawner = var_7; var_8.dropweapon = 0; var_8.nodrop = 1; var_8.grenadeammo = 0; var_8.allowdeath = 1; var_8.ignoreme = 1; var_8.ref_node = var_4; var_8 thread maps\carrier_code_zodiac::rappel_exit( var_4, var_1, var_2, var_3 ); if ( isai( var_8 ) ) var_8 maps\_utility::delaythread( var_1 + randomfloatrange( 2, 3 ), maps\_utility::set_ignoreme, 0 ); return var_8; } zodiac_main_wave() { maps\_utility::delaythread( 5, maps\carrier_code::spawn_gunboat, "defend_gunboat_21", 1 ); maps\_utility::delaythread( 5, maps\carrier_code::spawn_gunboat, "defend_gunboat_22" ); maps\_utility::delaythread( 7, common_scripts\utility::flag_set, "gunboats_01" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_20", 0, 1, "using_depth_charge" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_21", 0, 1, "using_depth_charge" ); maps\_utility::delaythread( 5, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_20", 0, 1, "using_depth_charge" ); maps\_utility::delaythread( 5, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_21", 0, 1, "using_depth_charge" ); maps\_utility::delaythread( 5, maps\carrier_code_zodiac::spawn_fake_zodiacs, "defend_zodiac_fake_01", 25 ); } zodiac_osprey_wave() { if ( level.zodiacs.size < level.max_zodiacs - 4 ) { maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_20" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_21" ); } maps\_utility::delaythread( 0, maps\carrier_code::spawn_gunboat, "defend_gunboat_turn_01" ); maps\_utility::delaythread( 0, maps\carrier_code::spawn_gunboat, "defend_gunboat_turn_02" ); maps\_utility::delaythread( 0, maps\carrier_code::spawn_gunboat, "defend_gunboat_turn_03" ); maps\_utility::delaythread( 2, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_turn_01" ); maps\_utility::delaythread( 2, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_turn_02" ); maps\_utility::delaythread( 2, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_turn_03" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_21", undefined, undefined, undefined, 1 ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_osprey_10", undefined, undefined, undefined, 1 ); maps\_utility::delaythread( 2, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_osprey_20" ); maps\_utility::delaythread( 2, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_osprey_21" ); } zodiac_main_wave_2() { maps\_utility::array_delete( get_zodiacs( "defend_zodiac_20" ) ); maps\_utility::array_delete( get_zodiacs( "defend_zodiac_21" ) ); maps\_utility::array_delete( get_gunboats( "defend_gunboat_turn_01" ) ); maps\_utility::array_delete( get_gunboats( "defend_gunboat_turn_02" ) ); maps\_utility::array_delete( get_gunboats( "defend_gunboat_turn_03" ) ); maps\_utility::delaythread( 5, maps\carrier_code::spawn_gunboat, "defend_gunboat_21", 1 ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_30", 0, 0, "using_depth_charge", 1 ); maps\_utility::delaythread( 3, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_20", 0, 1, "using_depth_charge" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_21", 0, 1, "using_depth_charge" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_20", 0, 1, "using_depth_charge" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_21", 0, 1, "using_depth_charge" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_fake_zodiacs, "defend_zodiac_fake_01", 25 ); common_scripts\utility::waitframe(); level.player notify( "teleport_zodiacs" ); } get_zodiacs( var_0 ) { var_1 = []; foreach ( var_3 in level.zodiacs ) { if ( isdefined( var_3.saved_targetname ) && var_3.saved_targetname == var_0 ) var_1 = common_scripts\utility::array_add( var_1, var_3 ); } return var_1; } get_gunboats( var_0 ) { var_1 = []; foreach ( var_3 in level.gunboats ) { if ( isdefined( var_3.saved_targetname ) && var_3.saved_targetname == var_0 ) var_1 = common_scripts\utility::array_add( var_1, var_3 ); } return var_1; } zodiac_osprey_2_wave() { maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_21", undefined, undefined, undefined, 1 ); maps\_utility::delaythread( 4, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_osprey_20" ); maps\_utility::delaythread( 4, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_osprey_21" ); maps\_utility::delaythread( 4, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_osprey_22" ); maps\_utility::delaythread( 0, maps\carrier_code::spawn_gunboat, "defend_gunboat_turn_02" ); maps\_utility::delaythread( 0, maps\carrier_code::spawn_gunboat, "defend_gunboat_turn_03" ); maps\_utility::delaythread( 2, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_turn_01" ); maps\_utility::delaythread( 2, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_turn_03" ); } zodiac_turn_wave() { maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_30" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_31" ); maps\_utility::delaythread( 3, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_filler_32" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_20" ); maps\_utility::delaythread( 0, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_21" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_vista_00b" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_vista_01b" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_vista_02b" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiac_rappel, "defend_zodiac_vista_03b" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_initial_driveby_01" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_initial_driveby_02" ); maps\_utility::delaythread( 1, maps\carrier_code_zodiac::spawn_zodiacs, "defend_zodiac_initial_driveby_03" ); } osprey_intermission() { common_scripts\utility::flag_set( "osprey_intermission" ); var_0 = common_scripts\utility::getstruct( "osprey_intermission_lookat", "targetname" ).origin; var_1 = vectortoangles( var_0 - level.player.origin ); var_1 = maps\_utility::set_x( var_1, 0 ); level.player setplayerangles( var_1 ); var_2 = getent( "inhibit_intermission_climbover", "targetname" ); var_3 = getaicount( "all" ); if ( var_3 < 20 && !level.player istouching( var_2 ) ) thread intermission_climbover(); else { } } intermission_climbover() { clear_ally_drones( "osprey_intermission_drones" ); var_0 = maps\_utility::spawn_targetname( "intermission_enemy_catwalk_01", 1 ); var_0.accuracy = var_0.accuracy / 10; var_1 = maps\_utility::spawn_targetname( "intermission_pushover_ally", 1 ); var_1 thread maps\_utility::magic_bullet_shield( 1 ); var_2 = climb_over( "intermission_climbover_01", 1 ); if ( isdefined( var_2 ) ) { level.dz_intermission_enemies = common_scripts\utility::array_add( level.dz_intermission_enemies, var_2 ); var_2.accuracy = var_2.accuracy / 10; } var_3 = climb_over( "intermission_climbover_02", undefined, 0, 1 ); level.dz_intermission_enemies = common_scripts\utility::array_add( level.dz_intermission_enemies, var_3 ); if ( isdefined( var_3 ) ) { level.dz_intermission_enemies = common_scripts\utility::array_add( level.dz_intermission_enemies, var_3 ); var_1.push_enemy = var_3; var_1 ally_push(); } if ( isalive( var_1 ) ) var_1 maps\_utility::stop_magic_bullet_shield(); wait 1; if ( isalive( var_1 ) ) var_1 kill(); } cleanup_intermission_enemies() { foreach ( var_1 in level.dz_intermission_enemies ) { if ( isalive( var_1 ) ) var_1 kill(); } } clear_ally_drones( var_0 ) { var_1 = getentarray( "osprey_intermission_drones", "script_noteworthy" ); foreach ( var_3 in var_1 ) { if ( !isdefined( var_3 ) ) continue; if ( isspawner( var_3 ) ) { var_3 maps\_utility::delaythread( 0, maps\carrier_code::inhibit_respawn, 1 ); var_3 maps\_utility::delaythread( 10, maps\carrier_code::inhibit_respawn, 0 ); continue; } var_3 delete(); } } defend_zodiac_waittill_enemies_remaining( var_0, var_1 ) { var_2 = gettime(); while ( gettime() < var_2 + var_1 * 1000 ) { var_3 = get_all_enemies(); var_4 = 0; foreach ( var_6 in var_3 ) { if ( isdefined( var_6 ) && isalive( var_6 ) && !maps\carrier_code::eval( var_6.dead ) ) { var_4++; if ( var_4 > var_0 ) break; } } if ( var_4 <= var_0 ) return; wait 1; } } get_all_enemies() { var_0 = getaiarray( "bad_guys" ); var_1 = []; foreach ( var_3 in var_0 ) { if ( isdefined( var_3.script_noteworthy ) && var_3.script_noteworthy == "enemy_defend_zodiac" ) var_1 = common_scripts\utility::array_add( var_1, var_3 ); } var_5 = level.drones["axis"].array; var_6 = []; foreach ( var_8 in var_5 ) { if ( isdefined( var_8.script_noteworthy ) && var_8.script_noteworthy == "enemy_defend_zodiac" ) var_6 = common_scripts\utility::array_add( var_6, var_8 ); } return common_scripts\utility::array_combine( var_1, var_6 ); } run_helis() { common_scripts\utility::flag_wait( "defend_zodiac_osprey_pre_finished" ); var_0 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "dz_heli_01" ); foreach ( var_2 in var_0.riders ) { if ( isalive( var_2 ) ) var_2.accuracy = var_2.accuracy / 2; } var_0 thread update_heli_crash_location(); var_0 maps\_vehicle::godon(); wait 1; var_0 maps\_vehicle::godoff(); level.player waittill( "using_depth_charge" ); if ( isalive( var_0 ) ) var_0 delete(); } update_heli_crash_location() { self endon( "death" ); var_0 = common_scripts\utility::getstructarray( "dz_heli_01_crash_location", "targetname" ); for (;;) { self.perferred_crash_location = common_scripts\utility::getclosest( self.origin, var_0 ); wait 0.1; } } run_vignettes() { thread run_intro(); } run_intro() { thread deck_explode(); thread heli_flyover(); common_scripts\utility::flag_wait( "defend_zodiac_wave_01" ); thread intro_migs(); thread deck_explode_vista(); } intro_migs() { maps\_utility::array_spawn_function_targetname( "dz_intro_jet_01", maps\carrier_vista::jet_phalanx_spawn_function, "tracking_start", "tracking_end" ); getent( "dz_intro_jet_01", "targetname" ) maps\carrier_code::waittill_player_not_looking( 1 ); var_0 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "dz_intro_jet_01" ); var_1 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "dz_intro_jet_02" ); maps\carrier_code::phalanx_gun_fire_target( "crr_phalanx_01", var_0, "tracking_start", "tracking_end", ( 0, 0, 0 ), "tag_body" ); } deck_explode() { thread deck_explode_guys(); common_scripts\utility::flag_wait( "defend_zodiac_wave_01" ); thread maps\carrier_audio::aud_carr_zodiac_deck_explode(); wait 2.5; common_scripts\utility::flag_set( "dz_deck_explode" ); var_0 = common_scripts\utility::getstruct( "dz_intro_deck_explode", "targetname" ); playfx( common_scripts\utility::getfx( "vfx_missile_death_deck" ), var_0.origin ); radiusdamage( var_0.origin, var_0.radius, 300, 90, undefined, "MOD_EXPLOSIVE" ); physicsexplosionsphere( var_0.origin, var_0.radius * 2, var_0.radius, 100 ); screenshake( var_0.origin, 3, 2, 2, 0.8, 0, 0.8, 2000, 4, 6, 5 ); level.player playrumbleonentity( "heavy_1s" ); common_scripts\utility::array_thread( level.dz_deck_explode_dmg, maps\carrier_code::show_and_raise_entity ); common_scripts\utility::array_thread( getentarray( "barrel_impact_2", "targetname" ), maps\_utility::hide_entity ); common_scripts\utility::array_thread( getentarray( "odin_phys_objects_2", "targetname" ), maps\_utility::hide_entity ); getent( "dz_deck_explode_weapon", "script_noteworthy" ) delete(); } deck_explode_guys() { var_0 = maps\_utility::array_spawn_targetname( "dz_deck_explode_guy" ); common_scripts\utility::flag_wait( "defend_zodiac_wave_01" ); wait 1; foreach ( var_2 in var_0 ) { var_2 maps\_utility::set_goalradius( 4 ); var_2 setgoalpos( common_scripts\utility::getstruct( var_2.target, "targetname" ).origin ); } } deck_explode_vista() { common_scripts\utility::flag_wait( "defend_zodiac_arrived_catwalk" ); var_0 = common_scripts\utility::getstruct( "dz_intro_deck_explode_vista", "targetname" ); playfx( common_scripts\utility::getfx( "vfx_missile_death_deck" ), var_0.origin ); thread maps\carrier_audio::aud_carr_zodiac_deck_explode_vista(); radiusdamage( var_0.origin, var_0.radius, 300, 90, undefined, "MOD_EXPLOSIVE" ); physicsexplosionsphere( var_0.origin, var_0.radius * 2, var_0.radius, 100 ); screenshake( var_0.origin, 3, 2, 2, 0.8, 0, 0.8, 2000, 4, 6, 5 ); } heli_flyover() { var_0 = common_scripts\utility::getstruct( "hesh_defend_run_1", "targetname" ); var_1 = common_scripts\utility::spawn_tag_origin(); var_1.origin = var_0.origin; var_1 maps\_utility::waittill_player_lookat( 0.5, 0, 1 ); var_1 delete(); var_2 = []; var_2[var_2.size] = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "dz_intro_heli_01" ); var_2[var_2.size] = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "dz_intro_heli_02" ); wait 5; thread maps\_utility::ai_delete_when_out_of_sight( var_2, 5000 ); } run_jet_takeoff() { thread maps\carrier_audio::aud_zodiac_jet_catapult_01(); maps\carrier_code::carrier_life_jet_takeoff_jet( "anim_jet_launcher1", "jet_launcher1", "jet_takeoff1_exit", 6, 8 ); level.player waittill( "using_depth_charge" ); if ( isdefined( level.old_player_origin ) ) { var_0 = common_scripts\utility::spawn_tag_origin(); var_0.origin = level.old_player_origin; var_1 = getent( "nearby_jet2", "targetname" ); if ( !var_0 istouching( var_1 ) ) { common_scripts\utility::flag_wait( "defend_zodiac_osprey_turn" ); thread maps\carrier_audio::aud_zodiac_jet_catapult_02(); maps\carrier_code::carrier_life_jet_takeoff_jet( "anim_jet_launcher2", "jet_launcher2", "jet_takeoff2_exit", 7 ); } var_0 delete(); } } run_allies( var_0 ) { if ( maps\carrier_code::eval( var_0 ) ) spawn_checkpoint_only_allies(); else { var_1 = getentarray( "defend_zodiac_ally", "targetname" ); maps\_utility::array_delete( var_1 ); } level.respawn_spawner_org = common_scripts\utility::getstruct( "defend_zodiac_allies_respawn_struct", "targetname" ).origin; common_scripts\utility::flag_clear( "respawn_friendlies" ); maps\_utility::activate_trigger_with_targetname( "defend_zodiac_allies_move" ); level.friendly_startup_thread = ::ally_think; if ( !maps\carrier_code::eval( var_0 ) ) { var_2 = common_scripts\utility::array_combine( maps\_utility::get_force_color_guys( "allies", "r" ), maps\_utility::get_force_color_guys( "allies", "o" ) ); common_scripts\utility::array_thread( var_2, ::ally_think ); if ( var_2.size < 5 ) { for ( var_3 = var_2.size; var_3 < 4; var_3++ ) thread defend_zodiac_spawn_reinforcement(); } } common_scripts\utility::flag_wait( "defend_zodiac_wave_01" ); common_scripts\utility::array_thread( getentarray( "defend_zodiac_ally_drone_wave_01", "targetname" ), maps\carrier_code::drone_respawner, "defend_zodiac_finished", 20, 30, 1, 3 ); } initial_drone_allies() { var_0 = maps\_utility::spawn_targetname( "defend_zodiac_ally_drone_initial", 0 ); if ( isdefined( var_0 ) ) { var_0.noragdoll = undefined; var_0 thread maps\carrier_code::randomly_kill_drone(); } common_scripts\utility::flag_wait( "defend_zodiac_wave_01" ); var_1 = getent( "defend_zodiac_ally_drone_initial_02", "targetname" ); if ( !maps\_utility::either_player_looking_at( var_1.origin ) ) { var_0 = maps\_utility::spawn_targetname( "defend_zodiac_ally_drone_initial_02", 0 ); if ( isdefined( var_0 ) ) { var_0.noragdoll = undefined; var_0 thread maps\carrier_code::randomly_kill_drone(); } } } spawn_checkpoint_only_allies() { maps\_utility::array_spawn_function_targetname( "defend_zodiac_ally", ::ally_think ); var_0 = maps\carrier_code::array_spawn_targetname_allow_fail( "defend_zodiac_ally", 1 ); var_1 = getentarray( "defend_zodiac_ally", "targetname" ); maps\_utility::array_delete( var_1 ); } ally_think() { self endon( "death" ); thread ally_cleanup(); thread defend_zodiac_replace_on_death(); maps\_utility::disable_ai_color(); self.animname = "generic"; self.script_accuracy = 0.1; self.health = self.health * 3; self.maxsightdistsqrd = 144000000; self.goalradius = 8; self.downaimlimit = -90; if ( !isdefined( level.zodiac_allies ) ) level.zodiac_allies = []; level.zodiac_allies = common_scripts\utility::array_add( level.zodiac_allies, self ); thread traversal_hack(); wait 0.1; ally_node_logic(); } ally_node_logic() { var_0 = get_free_edge_node(); if ( isdefined( var_0 ) ) { self.mynode = var_0; thread ally_edge_think( var_0 ); } else { for ( var_0 = get_free_shoot_node(); !isdefined( var_0 ); var_0 = get_free_shoot_node() ) wait 1; self.mynode = var_0; thread ally_shoot_think( var_0 ); } } get_free_edge_node() { foreach ( var_1 in level.ally_edge_nodes ) { if ( !isdefined( var_1.reserved ) || !var_1.reserved ) return var_1; } return undefined; } get_free_shoot_node() { foreach ( var_1 in level.ally_shoot_nodes ) { if ( !isdefined( var_1.reserved ) || !var_1.reserved ) return var_1; } return undefined; } reserve_node( var_0 ) { var_0 endon( "freed" ); var_0.reserved = 1; self waittill( "death" ); free_node( var_0 ); } free_node( var_0 ) { var_0.reserved = 0; var_0 notify( "freed" ); } ally_shoot_think( var_0, var_1 ) { self endon( "death" ); level endon( "defend_zodiac_finished" ); thread reserve_node( var_0 ); self setgoalnode( var_0 ); self waittill( "goal" ); maps\_utility::set_ignoreall( 0 ); for (;;) { thread shoot_at_fake_target(); wait( randomfloatrange( 2, 4 ) ); if ( maps\carrier_code::eval( var_1 ) && should_lean() ) { free_node( var_0 ); self notify( "stop_shoot" ); thread ally_edge_think( var_0 ); return; } } } shoot_at_fake_target() { self endon( "death" ); self endon( "stop_shoot" ); level endon( "defend_zodiac_finished" ); if ( maps\carrier_code::eval( self.isreloading ) || maps\carrier_code::eval( self.a.exposedreloading ) ) return; self.noreload = 1; var_0 = level.zodiac_ally_shoot_targets[randomint( level.zodiac_ally_shoot_targets.size )]; var_1 = randomintrange( 6, 12 ); for ( var_2 = 0; var_2 < var_1; var_2++ ) { self shoot( 0.5, var_0.origin, 1 ); wait 0.1; } self.noreload = undefined; } ally_edge_think( var_0 ) { self endon( "death" ); level endon( "defend_zodiac_finished" ); self endon( "stop_edge_think" ); thread reserve_node( var_0 ); maps\_utility::set_ignoreall( 0 ); for (;;) { if ( should_lean() ) lean_anim( var_0, 1 ); else { thread ally_shoot_think( var_0, 1 ); return; } wait( randomfloatrange( 0.5, 2 ) ); } } run_ally_edge_death() { self endon( "death" ); wait( randomfloatrange( 2, 3 ) ); if ( self.leaning && randomint( 100 ) > 80 && !maps\carrier_code::eval( self.no_edge_death ) ) thread ally_edge_death(); } ally_edge_death() { self.ignoreme = 1; self setlookattext( "", &"" ); self setcandamage( 0 ); self.a.nodeath = 1; self notify( "stop_loop" ); self notify( "stop_lean" ); self notify( "stop_edge_think" ); thread maps\carrier_code_zodiac::splash_on_hit_water_ragdoll(); maps\_anim::anim_single_solo( self, "carrier_rappel_defend_ally_lean_death" ); self kill(); } lean_anim( var_0, var_1 ) { self endon( "death" ); self endon( "stop_lean" ); var_2 = var_0; self.goal_node = var_2; if ( !maps\carrier_code::eval( var_1 ) ) var_2 maps\_anim::anim_generic_reach( self, "carrier_rappel_defend_ally_lean_enter" ); var_2 maps\_anim::anim_generic( self, "carrier_rappel_defend_ally_lean_enter" ); self.leaning = 1; self notify( "start_lean" ); var_3 = 25; while ( should_lean() ) { if ( self != level.hesh ) thread run_ally_edge_death(); self notify( "stop_loop" ); thread maps\_anim::anim_generic_loop( self, "carrier_rappel_defend_ally_lean_shoot_long", "stop_loop" ); wait( randomfloatrange( 4, 6 ) ); self notify( "stop_loop" ); if ( randomint( 100 ) < var_3 ) { maps\_anim::anim_generic( self, "carrier_rappel_defend_ally_lean_wave" ); continue; } thread maps\_anim::anim_generic_loop( self, "carrier_rappel_defend_ally_lean_idle", "stop_loop" ); wait( randomfloatrange( 0.5, 2 ) ); } stop_lean(); } stop_lean() { self notify( "stop_loop" ); maps\_anim::anim_generic( self, "carrier_rappel_defend_ally_lean_exit" ); self.leaning = 0; self notify( "stop_lean" ); } should_lean() { var_0 = 600; var_1 = 0; var_2 = getentarray( "enemy_defend_zodiac", "script_noteworthy" ); var_3 = []; foreach ( var_5 in var_2 ) { if ( !isspawner( var_5 ) && isalive( var_5 ) ) var_3[var_3.size] = var_5; } foreach ( var_8 in var_3 ) { var_9 = var_8 gettagorigin( "j_head" ); var_10 = distance2dsquared( self.origin, var_9 ); var_11 = maps\_utility::players_within_distance( 64, self.origin ); if ( var_10 <= var_0 * var_0 && !var_11 ) return 1; } return 0; } ally_cleanup() { common_scripts\utility::flag_wait( "defend_zodiac_finished" ); if ( isdefined( self ) ) thread disable_defend_zodiac_replace_on_death(); common_scripts\utility::flag_wait( "defend_zodiac_ally_cleanup" ); if ( isdefined( self ) ) self kill(); } ally_drone_cleanup() { level endon( "defend_zodiac_finished" ); for (;;) { if ( level.dead_ally_drones.size > 6 ) { while ( level.dead_ally_drones.size > 6 ) { if ( isdefined( level.dead_ally_drones[0] ) ) level.dead_ally_drones[0] delete(); level.dead_ally_drones = maps\_utility::array_remove_index( level.dead_ally_drones, 0 ); } } wait 5; } } ally_push() { if ( !isalive( self ) ) return; self.push_enemy endon( "death" ); self.animname = "generic"; self.push_enemy stopanimscripted(); self.push_enemy unlink(); self.push_enemy.ref_node thread maps\_anim::anim_generic( self.push_enemy, "carrier_rappel_defend_ally_push_victim" ); self.push_enemy thread kill_push_enemy(); var_0 = spawnstruct(); var_0.origin = self.push_enemy.ref_node.origin - ( 0, 0, 3 ); var_0.angles = self.push_enemy.ref_node.angles; var_0 maps\_anim::anim_generic( self, "carrier_rappel_defend_ally_push" ); } kill_push_enemy() { maps\carrier_code_zodiac::splash_on_hit_water_ragdoll(); wait 1; if ( isdefined( self ) ) self delete(); } defend_zodiac_replace_on_death() { self endon( "disable_defend_zodiac_replace_on_death" ); if ( isdefined( self.defend_zodiac_replace_on_death ) ) return; self.defend_zodiac_replace_on_death = 1; self waittill( "death" ); level.zodiac_allies = maps\_utility::array_removedead( level.zodiac_allies ); defend_zodiac_spawn_reinforcement(); } defend_zodiac_spawn_reinforcement() { var_0 = defend_zodiac_spawn_hidden_reinforcement(); if ( isdefined( level.friendly_startup_thread ) ) var_0 thread [[ level.friendly_startup_thread ]](); } defend_zodiac_spawn_hidden_reinforcement() { var_0 = undefined; for (;;) { if ( !maps\_colors::respawn_friendlies_without_vision_check() ) { if ( !isdefined( level.friendly_respawn_vision_checker_thread ) ) thread maps\_colors::friendly_spawner_vision_checker(); for (;;) { maps\_colors::wait_until_vision_check_satisfied_or_disabled(); common_scripts\utility::flag_waitopen( "friendly_spawner_locked" ); if ( common_scripts\utility::flag( "player_looks_away_from_spawner" ) || maps\_colors::respawn_friendlies_without_vision_check() ) break; } common_scripts\utility::flag_set( "friendly_spawner_locked" ); } var_1 = level.defend_zodiac_ally_respawner; var_1.count = 1; var_2 = var_1.origin; var_0 = var_1 stalingradspawn(); var_1.origin = var_2; if ( maps\_utility::spawn_failed( var_0 ) ) { thread maps\_colors::lock_spawner_for_awhile(); wait 1; continue; } level notify( "reinforcement_spawned", var_0 ); break; } thread maps\_colors::lock_spawner_for_awhile(); return var_0; } disable_defend_zodiac_replace_on_death() { self.defend_zodiac_replace_on_death = undefined; self notify( "disable_defend_zodiac_replace_on_death" ); } get_closest_ally() { if ( isdefined( level.zodiac_allies ) && level.zodiac_allies.size > 0 ) { level.zodiac_allies = sortbydistance( level.zodiac_allies, level.player.origin ); return level.zodiac_allies[0]; } return undefined; } #using_animtree("generic_human"); traversal_hack() { self endon( "death" ); for (;;) { if ( isdefined( self.traverseanim ) && self.traverseanim == %traverse_jumpdown_56 ) { wait 1.2; self notify( "killanimscript" ); return; } common_scripts\utility::waitframe(); } } run_osprey_nag_first_time_vo() { level endon( "defend_zodiac_finished" ); level.player endon( "using_depth_charge" ); if ( maps\carrier_code::eval( level.player.using_depth_charge ) ) return; wait 3; level.hesh maps\_utility::smart_dialogue( "carrier_hsh_adamcallinthe" ); wait 2; thread run_osprey_nag_vo(); } run_osprey_nag_vo() { level endon( "defend_zodiac_finished" ); level.player endon( "using_depth_charge" ); if ( maps\carrier_code::eval( level.player.using_depth_charge ) ) return; wait( randomfloatrange( 3, 4 ) ); var_0 = [ "carrier_hsh_usetheospreyto", "carrier_hsh_adamcallinthe" ]; var_1 = 0; for (;;) { level.hesh maps\_utility::smart_dialogue( var_0[var_1] ); var_1++; if ( var_1 >= var_0.size ) var_1 = 0; wait( randomfloatrange( 8, 12 ) ); } } run_osprey_start_vo() { level.player waittill( "start_using_depth_charge" ); maps\_utility::smart_radio_dialogue( "carrier_hp2_titanthreeonestartingour" ); maps\_utility::smart_radio_dialogue( "carrier_com_copythreeone" ); maps\_utility::smart_radio_dialogue( "carrier_hp2_titanthreeoneinboundlets" ); } run_osprey_start_2_vo() { level.player waittill( "start_using_depth_charge" ); maps\_utility::smart_radio_dialogue( "carrier_hp2_beginningourrun" ); maps\_utility::smart_radio_dialogue( "carrier_com_understoodthreeone" ); maps\_utility::smart_radio_dialogue( "carrier_hp2_titanthreeonecomingin" ); } run_osprey_hit_vo() { level.player endon( "depth_charge_exit" ); level endon( "pre_gunship_attack_vo" ); level.player waittill( "using_depth_charge" ); var_0 = 0; for (;;) { var_1 = level.osprey_hit_zodiacs + level.osprey_hit_gunboats + level.osprey_hit_fake_targets; if ( var_1 >= 7 && gettime() > var_0 + 5000 ) { wait 1; maps\_utility::smart_radio_dialogue( "carrier_com_8plushitsnice" ); var_0 = gettime(); } else if ( var_1 >= 2 ) { var_2 = [ "carrier_com_multiplehitstitanthreeone", "carrier_ttn_multipleboatsconfirmedhit", "carrier_hsh_goodhits", "carrier_hsh_multiplehits" ]; if ( level.osprey_hit_zodiacs > 0 ) var_2 = common_scripts\utility::array_add( var_2, "carrier_ttn_zodiacsdown" ); wait 1; maps\_utility::smart_radio_dialogue( var_2[randomint( var_2.size )] ); wait 2; } level.osprey_hit_zodiacs = 0; level.osprey_hit_gunboats = 0; level.osprey_hit_fake_targets = 0; wait 3; } } run_osprey_finish_vo() { level.player waittill( "depth_charge_exit" ); wait 0.5; if ( level.zodiac_allies.size == 0 ) return; level.zodiac_allies = sortbydistance( level.zodiac_allies, level.player.origin ); level.zodiac_allies[0] thread maps\_utility::smart_dialogue( "carrier_us6_hellyeah" ); } run_enemy_destroyer() { level.player waittill( "using_depth_charge" ); level.fake_targets = common_scripts\utility::array_removeundefined( level.fake_targets ); level.fed_destroyer_osprey.rig setanimtime( level.scr_anim["boat"]["carrier_destroyer_idle"][0], 0 ); thread run_enemy_destroyer_gun(); var_0 = common_scripts\utility::getstructarray( "destroyer_target_big", "targetname" ); foreach ( var_2 in var_0 ) { var_3 = common_scripts\utility::spawn_tag_origin(); var_3.origin = var_2.origin; var_3.angles = var_2.angles; var_3.script_noteworthy = "big"; var_3 thread maps\carrier_code::setup_target_on_vehicle(); level.destroyer_targets_big = common_scripts\utility::array_add( level.destroyer_targets_big, var_3 ); level.fake_targets = common_scripts\utility::array_add( level.fake_targets, var_3 ); } var_5 = maps\_vehicle::spawn_vehicle_from_targetname( "osprey_heli_01" ); var_5 thread maps\carrier_code::setup_target_on_vehicle(); level.fake_targets = common_scripts\utility::array_add( level.fake_targets, var_5 ); maps\_utility::delaythread( 5, maps\_vehicle::gopath, var_5 ); maps\_utility::array_spawn_function_targetname( "osprey_destroyer_guys", ::enemy_destroyer_guy_logic ); level.fed_destroyer_guys = maps\_utility::array_spawn_targetname( "osprey_destroyer_guys" ); level.player waittill( "depth_charge_exit" ); thread cleanup_enemy_destroyer(); } run_enemy_destroyer_2() { thread run_enemy_destroyer_gun(); maps\_utility::array_spawn_function_targetname( "osprey_destroyer_guys", ::enemy_destroyer_guy_logic ); level.fed_destroyer_guys = maps\_utility::array_spawn_targetname( "osprey_destroyer_guys" ); foreach ( var_1 in level.fed_destroyer_guys ) { if ( isdefined( var_1.script_noteworthy ) && var_1.script_noteworthy == "first_run_only" ) var_1 delete(); } level.player waittill( "depth_charge_exit" ); thread cleanup_enemy_destroyer(); } run_enemy_destroyer_gun() { level.player endon( "depth_charge_exit" ); level endon( "stop_fed_destroyer_guns" ); while ( !common_scripts\utility::flag( "destroyed_fed_destroyer_guns" ) ) { level.fed_destroyer_osprey.gun rotatetolinked( ( 0, 0, 0 ), 5, 2, 2 ); wait 5; level.fed_destroyer_osprey.gun rotatetolinked( ( 0, 30, 0 ), 5, 2, 2 ); wait 5; } } cleanup_enemy_destroyer() { foreach ( var_1 in level.destroyer_targets_big ) { if ( isdefined( var_1 ) ) var_1 delete(); } foreach ( var_4 in level.fed_destroyer_guys ) { if ( isdefined( var_4 ) ) var_4 delete(); } } enemy_destroyer_guy_logic() { self endon( "death" ); level.fake_targets = common_scripts\utility::array_removeundefined( level.fake_targets ); level.fake_targets = common_scripts\utility::array_add( level.fake_targets, self ); thread maps\carrier_code::setup_target_on_vehicle(); self.drone_run_speed = 140; if ( isdefined( self.script_moveoverride ) ) { self linkto( level.fed_destroyer_osprey ); wait( self.script_moveoverride ); self notify( "move" ); self unlink(); } self waittill( "goal" ); self linkto( level.fed_destroyer_osprey ); } pre_gunship_attack_vo() { common_scripts\utility::flag_set( "pre_gunship_attack_vo" ); maps\_utility::smart_radio_dialogue( "carrier_com_allsquadsbeadvised" ); maps\_utility::smart_radio_dialogue( "carrier_us6_gunshipaboveus" ); maps\_utility::smart_radio_dialogue( "carrier_us6_yankee11fedgunship" ); } osprey2_gunship_attack() { var_0 = common_scripts\utility::getstruct( "osprey2_gunship_attack_pos", "targetname" ); var_1 = common_scripts\utility::spawn_tag_origin(); var_1.origin = var_0.origin; wait 5.5; maps\_utility::delaythread( 4.5, maps\carrier_code::gunship_line_attack_fake, "osprey2_gunship_attack_25_01", var_0.origin ); var_2 = common_scripts\utility::getstruct( "osprey2_gunship_attack_105_01", "targetname" ); thread maps\carrier_code::ac130_magic_105_fake( var_0.origin, var_2.origin ); thread maps\carrier_audio::aud_zodiac_gunship_attack_105_fake( var_2 ); wait 1; var_2 = common_scripts\utility::getstruct( "osprey2_gunship_attack_105_02", "targetname" ); thread maps\carrier_code::ac130_magic_105_fake( var_0.origin, var_2.origin ); thread maps\carrier_audio::aud_zodiac_gunship_attack_105_fake( var_2 ); wait 0.5; var_2 = common_scripts\utility::getstruct( "osprey2_gunship_attack_105_03", "targetname" ); thread maps\carrier_code::ac130_magic_bullet_fake( "40mm", var_0.origin, var_2.origin ); var_1 maps\_utility::play_sound_on_entity( "ac130_40mm_fire_npc" ); thread maps\carrier_audio::aud_zodiac_gunship_attack_105_fake( var_2 ); wait 1; var_2 = common_scripts\utility::getstruct( "osprey2_gunship_attack_105_04", "targetname" ); thread maps\carrier_code::ac130_magic_105_fake( var_0.origin, var_2.origin ); thread maps\carrier_audio::aud_zodiac_gunship_attack_105_fake( var_2 ); wait 2; var_2 = common_scripts\utility::getstruct( "osprey2_gunship_attack_105_deck", "targetname" ); thread maps\carrier_code::ac130_magic_bullet_fake( "40mm", var_0.origin, var_2.origin ); var_1 maps\_utility::play_sound_on_entity( "ac130_40mm_fire_npc" ); thread maps\carrier_audio::aud_zodiac_gunship_attack_105_fake( var_2 ); wait 1; var_2 = common_scripts\utility::getstruct( "osprey2_gunship_attack_105_05", "targetname" ); thread maps\carrier_code::ac130_magic_bullet_fake( "40mm", var_0.origin, var_2.origin ); var_1 maps\_utility::play_sound_on_entity( "ac130_40mm_fire_npc" ); thread maps\carrier_audio::aud_zodiac_gunship_attack_105_fake( var_2 ); wait 1; var_1 delete(); } gunship_attack() { if ( isdefined( level.player_ignored_2nd_osprey ) ) { var_0 = getent( "enemy_ac130", "targetname" ); var_0 maps\carrier_code::waittill_player_not_looking( 1 ); } maps\_utility::delaythread( 0, maps\carrier_audio::aud_zodiac_to_sparrow_zone ); common_scripts\utility::flag_set( "defend_zodiac_finished" ); common_scripts\utility::array_thread( level.gunship_trans_triggers, maps\_utility::show_entity ); if ( !isdefined( level.player_ignored_2nd_osprey ) ) { teleport_player_post_osprey(); thread gunship_damage(); var_1 = getent( "gunship_transition_turn_player_vol", "targetname" ); if ( level.player istouching( var_1 ) ) { var_2 = common_scripts\utility::getstruct( var_1.target, "targetname" ); level.player setplayerangles( var_2.angles ); } } var_3 = getdvar( "ai_friendlyFireBlockDuration" ); setsaveddvar( "ai_friendlyFireBlockDuration", 0 ); thread player_handle_speed_for_knockdown(); thread allies_gunship_run(); thread hesh_gunship_run(); var_4 = common_scripts\utility::getstruct( "gunship_105_01", "targetname" ); if ( level.player.origin[1] < var_4.origin[1] ) { var_5 = common_scripts\utility::spawn_tag_origin(); var_5.origin = var_4.origin; var_5 maps\_utility::waittill_player_lookat( 0.8, 0.1, 1, 5 ); var_5 delete(); } level.player thread gunship_death(); thread gunship_attacking(); waittill_knockdown_moment(); common_scripts\utility::flag_set( "start_knockdown_moment" ); setsaveddvar( "ai_friendlyFireBlockDuration", var_3 ); thread cleanup_boats(); if ( isdefined( level.defend_zodiac_osprey ) ) level.defend_zodiac_osprey delete(); } waittill_knockdown_moment() { common_scripts\utility::flag_wait( "trigger_knockdown_moment" ); common_scripts\utility::flag_wait_or_timeout( "hesh_close_to_knockdown", 5 ); } gunship_damage() { common_scripts\utility::array_thread( level.deck_ac130_dmg, maps\carrier_code::show_and_raise_entity ); common_scripts\utility::array_thread( level.deck_ac130_dmg_clip, maps\_utility::show_entity ); var_0 = common_scripts\utility::getstructarray( "deck_ac130_dmg_badplace", "targetname" ); foreach ( var_3, var_2 in var_0 ) badplace_cylinder( "deck_ac130_dmg_badplace" + var_3, -1, var_2.origin, var_2.radius, 100, "allies" ); level.deck_ac130_dmg_badplace_size = var_0.size; common_scripts\utility::array_thread( level.elevator_ac130_dmg, maps\carrier_code::show_and_raise_entity ); common_scripts\utility::array_thread( getentarray( "barrel_impact", "targetname" ), maps\_utility::hide_entity ); common_scripts\utility::array_thread( getentarray( "barrel_impact_2", "targetname" ), maps\_utility::hide_entity ); common_scripts\utility::array_thread( getentarray( "odin_phys_objects", "targetname" ), maps\_utility::hide_entity ); common_scripts\utility::array_thread( getentarray( "odin_phys_objects_2", "targetname" ), maps\_utility::hide_entity ); common_scripts\utility::array_thread( getentarray( "odin_impact_objects_2", "targetname" ), maps\_utility::hide_entity ); var_4 = getscriptablearray( "scriptable_destructible_barrel", "targetname" ); foreach ( var_6 in var_4 ) var_6 delete(); var_8 = getentarray( "deck_combat_weapons", "targetname" ); maps\_utility::array_delete( var_8 ); } teleport_player_post_osprey() { var_0 = common_scripts\utility::spawn_tag_origin(); var_0.origin = level.player.origin; var_1 = getent( "player_near_knockdown_vol", "targetname" ); if ( var_0 istouching( var_1 ) ) { level.player.near_knockdown = 1; maps\_utility::teleport_player( common_scripts\utility::getstruct( "player_near_knockdown_teleport", "targetname" ) ); var_0 delete(); return; } var_2 = getentarray( "gunship_attack_player_teleport_vol", "targetname" ); foreach ( var_1 in var_2 ) { if ( var_0 istouching( var_1 ) ) { var_4 = common_scripts\utility::getstructarray( "gunship_attack_player_teleport_node", "targetname" ); var_4 = sortbydistance( var_4, level.player.origin ); maps\_utility::teleport_player( var_4[0] ); break; } } var_0 delete(); } allies_gunship_run() { var_0 = getent( "gunship_trans_ally_runto_elevator_vol", "targetname" ); foreach ( var_2 in level.zodiac_allies ) { if ( isalive( var_2 ) ) var_2 thread single_ally_run( var_0 ); } } single_ally_run( var_0 ) { self endon( "death" ); self notify( "stop_edge_think" ); if ( maps\carrier_code::eval( self.leaning ) ) stop_lean(); maps\_utility::enable_sprint(); self setgoalpos( self.origin ); self setgoalvolumeauto( var_0 ); while ( !self istouching( var_0 ) ) common_scripts\utility::waitframe(); thread maps\carrier_code::run_to_volume_and_delete( "gunship_trans_ally_runto_vol" ); } hesh_gunship_run() { level endon( "knockdown_moment" ); level.hesh notify( "stop_edge_think" ); var_0 = common_scripts\utility::getstruct( "sparrow_run_hesh_start_idle", "targetname" ); if ( !isdefined( level.player_ignored_2nd_osprey ) ) { var_1 = teleport_hesh_post_osprey(); level.hesh notify( "stop_loop" ); level.hesh stopanimscripted(); if ( maps\carrier_code::eval( level.player.near_knockdown ) ) { level.hesh forceteleport( var_0.origin, var_0.angles ); level.hesh thread maps\_utility::smart_dialogue( "carrier_hsh_wevegottoget_3" ); } else if ( level.player.origin[2] > 1380 ) { var_1 thread maps\_anim::anim_single_solo( level.hesh, "carrier_rappel_defend_hesh_dialog" ); maps\_utility::delaythread( 0.05, maps\_anim::anim_set_time, [ level.hesh ], "carrier_rappel_defend_hesh_dialog", 0.25 / getanimlength( level.scr_anim["hesh"]["carrier_rappel_defend_hesh_dialog"] ) ); } else var_1 thread maps\_anim::anim_single_solo( level.hesh, "carrier_rappel_defend_hesh_dialog" ); } else { if ( maps\carrier_code::eval( level.hesh.leaning ) ) level.hesh stop_lean(); else wait 2; level.hesh thread maps\_utility::smart_dialogue( "carrier_hsh_wevegottoget_3" ); } level.hesh disable_flinch(); level.hesh maps\_utility::enable_sprint(); if ( !maps\carrier_code::eval( level.player.near_knockdown ) ) wait 2; else wait 0.1; common_scripts\utility::flag_set( "gunship_attacking" ); common_scripts\utility::flag_set( "obj_defend_carrier_complete" ); thread maps\carrier::obj_sparrow(); var_2 = common_scripts\utility::getstruct( "sparrow_run_animnode", "targetname" ); thread hesh_close_to_knockdown( var_0 ); var_0 maps\_anim::anim_reach_solo( level.hesh, "sparrow_start_idle" ); level.hesh enable_flinch(); level.hesh maps\_utility::disable_sprint(); thread hesh_gunship_nag_vo(); var_0 maps\_anim::anim_loop_solo( level.hesh, "sparrow_start_idle" ); } hesh_close_to_knockdown( var_0 ) { while ( distance2d( level.hesh.origin, var_0.origin ) > 80 ) common_scripts\utility::waitframe(); common_scripts\utility::flag_set( "hesh_close_to_knockdown" ); } hesh_gunship_nag_vo() { level endon( "knockdown_moment" ); wait 3; for (;;) { maps\_utility::smart_radio_dialogue( "carrier_hsh_comeonadam" ); wait 6; maps\_utility::smart_radio_dialogue( "carrier_hsh_loganthisway" ); wait 7; } } player_handle_speed_for_knockdown() { level.player endon( "death" ); level.hesh endon( "death" ); level endon( "knockdown_moment" ); thread reset_player_speed(); var_0 = common_scripts\utility::getstruct( "sparrow_run_animnode", "targetname" ); for (;;) { if ( level.player.origin[1] > level.hesh.origin[1] && level.player.origin[1] < var_0.origin[1] + 200 ) { thread maps\_utility::blend_movespeedscale_percent( 75, 0.5 ); wait 0.5; continue; } thread maps\_utility::blend_movespeedscale_percent( 100, 0.5 ); wait 0.5; } } reset_player_speed() { common_scripts\utility::flag_wait( "knockdown_moment" ); maps\_utility::blend_movespeedscale_percent( 100, 0.5 ); } teleport_hesh_post_osprey() { if ( level.player.origin[2] > 1380 ) var_0 = common_scripts\utility::getstructarray( "hesh_post_osprey_teleport_deck", "targetname" ); else var_0 = common_scripts\utility::getstructarray( "hesh_post_osprey_teleport", "targetname" ); var_0 = sortbydistance( var_0, level.player.origin + ( 0, 550, 0 ) ); var_1 = var_0[0]; level.hesh forceteleport( maps\_utility::set_z( var_1.origin, 1344 ), var_1.angles ); return var_1; } gunship_attacking() { common_scripts\utility::flag_wait( "gunship_attacking" ); thread gunship_trans_1(); thread gunship_trans_2(); thread gunship_trans_3(); thread gunship_trans_4(); thread gunship_trans_loop(); thread gunship_trans_death_warning(); thread elevator_105(); level.ac_130 maps\_utility::delaythread( 0, maps\carrier_code::ac130_magic_bullet, "40mm", common_scripts\utility::getstruct( "gunship_105_01", "targetname" ).origin ); level.ac_130 maps\_utility::play_sound_on_entity( "ac130_40mm_fire_npc" ); thread maps\carrier_audio::aud_gunship_incoming_zodiac(); maps\_utility::delaythread( 2, maps\carrier_code::phalanx_gun_offline, "crr_phalanx_01" ); maps\_utility::delaythread( 3, ::launch_props, "gunship_trans_impact_objects_01" ); thread maps\carrier_audio::aud_zodiac_gunship_attack_barrels(); } gunship_trans_1() { level endon( "gunship_trans_2" ); level endon( "gunship_trans_3" ); level endon( "gunship_trans_4" ); common_scripts\utility::flag_wait( "gunship_trans_1" ); maps\_utility::delaythread( 0, maps\carrier_code::gunship_line_attack, "gunship_25_01" ); } gunship_trans_2() { level endon( "gunship_trans_3" ); level endon( "gunship_trans_4" ); common_scripts\utility::flag_wait( "gunship_trans_2" ); maps\_utility::delaythread( 0, maps\carrier_code::gunship_line_attack, "gunship_25_02" ); level.ac_130 maps\_utility::delaythread( 0, maps\carrier_code::ac130_magic_bullet, "40mm", common_scripts\utility::getstruct( "gunship_105_02", "targetname" ).origin ); level.ac_130 maps\_utility::play_sound_on_entity( "ac130_40mm_fire_npc" ); thread maps\carrier_audio::aud_gunship_incoming_zodiac(); maps\_utility::delaythread( 1, ::launch_props, "gunship_trans_impact_objects_02" ); } gunship_trans_3() { level endon( "gunship_trans_4" ); common_scripts\utility::flag_wait( "gunship_trans_3" ); maps\_utility::delaythread( 0, maps\carrier_code::gunship_line_attack, "gunship_25_03" ); level.ac_130 maps\_utility::delaythread( 0, maps\carrier_code::ac130_magic_bullet, "40mm", common_scripts\utility::getstruct( "gunship_105_03", "targetname" ).origin ); level.ac_130 maps\_utility::play_sound_on_entity( "ac130_40mm_fire_npc" ); thread maps\carrier_audio::aud_gunship_incoming_zodiac(); } gunship_trans_4() { common_scripts\utility::flag_wait( "gunship_trans_4" ); maps\_utility::delaythread( 0, maps\carrier_code::gunship_line_attack, "gunship_25_04" ); var_0 = common_scripts\utility::getstruct( "sparrow_trans_105_pre_start", "targetname" ); var_1 = common_scripts\utility::getstruct( "sparrow_trans_105_pre_01", "targetname" ); level.ac_130 maps\_utility::delaythread( 0, maps\carrier_code::ac130_magic_105_fake, var_0.origin, var_1.origin ); thread maps\carrier_audio::aud_gunship_incoming_zodiac(); thread maps\carrier_audio::aud_gunship_trans_4_105_01(); var_2 = common_scripts\utility::getstruct( "sparrow_trans_105_pre_02", "targetname" ); level.ac_130 maps\_utility::delaythread( 0.6, maps\carrier_code::ac130_magic_105_fake, var_0.origin, var_2.origin ); thread maps\carrier_audio::aud_gunship_incoming_zodiac(); thread maps\carrier_audio::aud_gunship_trans_4_105_02(); level.ac_130 maps\_utility::delaythread( 0, maps\carrier_code::ac130_magic_bullet, "40mm", common_scripts\utility::getstruct( "gunship_105_04", "targetname" ).origin ); level.ac_130 maps\_utility::play_sound_on_entity( "ac130_40mm_fire_npc" ); thread maps\carrier_audio::aud_gunship_incoming_zodiac(); } gunship_trans_loop() { level endon( "knockdown_moment" ); common_scripts\utility::flag_wait( "gunship_trans_4" ); for (;;) { maps\carrier_code::gunship_line_attack( "gunship_25_loop" ); wait( randomfloatrange( 0.5, 2 ) ); } } gunship_trans_death_warning() { level endon( "knockdown_moment" ); level.player endon( "death" ); for (;;) { common_scripts\utility::flag_wait( "gunship_trans_death_warning" ); while ( common_scripts\utility::flag( "gunship_trans_death_warning" ) ) { maps\carrier_code::gunship_line_attack( "gunship_25_death_warning", 3 ); wait( randomfloatrange( 0.5, 1 ) ); } } } launch_props( var_0 ) { var_1 = common_scripts\utility::getstructarray( var_0, "targetname" ); foreach ( var_3 in var_1 ) { var_4 = spawn( "script_model", var_3.origin ); var_4 setmodel( var_4.model ); var_5 = ( randomfloatrange( 3000, 5000 ), common_scripts\utility::ter_op( common_scripts\utility::cointoss(), randomfloatrange( 3000, 6000 ), randomfloatrange( -6000, -3000 ) ), randomfloatrange( 3000, 5000 ) ); var_4 physicslaunchclient( var_3.origin + ( 0, 0, 32 ), var_5 ); wait( randomfloatrange( 0.05, 0.25 ) ); } } cleanup_boats() { common_scripts\utility::flag_wait( "player_knocked_down" ); maps\carrier_code::ai_cleanup_fake_death( "enemy_defend_zodiac" ); maps\carrier_code::ai_cleanup_fake_death( "enemy_defend_zodiac_vista" ); maps\carrier_code::ai_cleanup_fake_death( "enemy_defend_zodiac_filler" ); thread maps\carrier_code::kill_remaining_gunboats(); } elevator_105( var_0 ) { var_1 = elevator_105_guys( var_0 ); common_scripts\utility::flag_wait( "knockdown_moment" ); wait 1; var_1 = maps\_utility::array_removedead( var_1 ); common_scripts\utility::array_thread( var_1, maps\_utility::stop_magic_bullet_shield ); var_2 = common_scripts\utility::getstruct( "dz_elevator_explode", "targetname" ); radiusdamage( var_2.origin, var_2.radius, 300, 90, undefined, "MOD_EXPLOSIVE" ); physicsexplosionsphere( var_2.origin, var_2.radius * 2, var_2.radius, 100 ); common_scripts\utility::waitframe(); foreach ( var_4 in var_1 ) { if ( isalive( var_4 ) ) var_4 kill(); } } elevator_105_guys( var_0 ) { var_1 = maps\_utility::array_spawn_targetname( "dz_elevator_explode_guy" ); foreach ( var_3 in var_1 ) var_3 maps\_utility::magic_bullet_shield( 1 ); return var_1; } elevator_lean_over( var_0 ) { self endon( "death" ); self.allowdeath = 0; self.dropweapon = 0; self.nodrop = 1; self.grenadeammo = 0; var_1 = common_scripts\utility::getstruct( self.target, "targetname" ); if ( !maps\carrier_code::eval( var_0 ) ) var_1 maps\_anim::anim_generic_reach( self, "carrier_rappel_defend_ally_lean_enter" ); var_1 maps\_anim::anim_generic( self, "carrier_rappel_defend_ally_lean_enter" ); for (;;) { thread maps\_anim::anim_generic_loop( self, "carrier_rappel_defend_ally_lean_shoot_long" ); wait( randomfloatrange( 1, 5 ) ); self notify( "stop_loop" ); thread maps\_anim::anim_generic_loop( self, "carrier_rappel_defend_ally_lean_idle" ); wait( randomfloatrange( 1, 5 ) ); self notify( "stop_loop" ); } } gunship_death() { level endon( "knockdown_moment" ); self endon( "death" ); var_0 = getentarray( "gunship_trans_kill", "targetname" ); var_1 = 0; wait 10; for (;;) { foreach ( var_3 in var_0 ) { if ( self istouching( var_3 ) ) { level.ac_130 maps\_utility::delaythread( 0, maps\carrier_code::ac130_magic_bullet, "40mm", level.player.origin + anglestoforward( level.player getplayerangles() ) * 400 ); level.ac_130 maps\_utility::play_sound_on_entity( "ac130_40mm_fire_npc" ); maps\carrier_code::gunship_line_attack_death(); wait 1; if ( isalive( self ) && self istouching( var_3 ) ) { setdvar( "ui_deadquote", &"CARRIER_DEATH_GUNSHIP" ); maps\_utility::missionfailedwrapper(); self kill(); } } } if ( var_1 >= 30.0 ) { maps\carrier_code::gunship_line_attack_death(); wait 1; setdvar( "ui_deadquote", &"CARRIER_DEATH_GUNSHIP" ); maps\_utility::missionfailedwrapper(); self kill(); } wait 0.05; var_1 = var_1 + 0.05; } } lower_blastshield( var_0 ) { var_1 = getent( "blastshield", "targetname" ); var_2 = getent( "blastshield_clip", "targetname" ); var_2 linkto( var_1 ); var_3 = common_scripts\utility::getstruct( var_1.target, "targetname" ); if ( maps\carrier_code::eval( var_0 ) ) { var_1 moveto( var_3.origin, 0.1 ); var_1 rotateto( var_3.angles, 0.1 ); wait 5; var_2 connectpaths(); } else { var_1 moveto( var_3.origin, 5, 2, 2 ); var_1 rotateto( var_3.angles, 5, 2, 2 ); wait 5; var_2 connectpaths(); } } spawner_cleanup() { common_scripts\utility::waitframe(); var_0 = getentarray( "enemy_defend_zodiac_vista", "script_noteworthy" ); var_1 = getentarray( "enemy_defend_zodiac", "script_noteworthy" ); var_2 = vehicle_getspawnerarray(); foreach ( var_4 in var_2 ) { if ( isdefined( var_4.targetname ) && ( issubstr( var_4.targetname, "defend_zodiac" ) || issubstr( var_4.targetname, "defend_gunboat" ) ) ) var_4 delete(); } foreach ( var_7 in var_0 ) { if ( isdefined( var_7 ) && isspawner( var_7 ) ) var_7 delete(); } foreach ( var_7 in var_1 ) { if ( isdefined( var_7 ) && isspawner( var_7 ) ) var_7 delete(); } } defend_zodiac_autosave( var_0, var_1 ) { if ( common_scripts\utility::flag( "dz_warning_right" ) || common_scripts\utility::flag( "dz_warning_front" ) || common_scripts\utility::flag( "dz_warning_rear" ) ) return; if ( maps\carrier_code::eval( var_0 ) ) maps\_utility::autosave_now_silent(); else maps\_utility::autosave_now(); if ( maps\carrier_code::eval( var_1 ) ) { level.player enabledeathshield( 1 ); wait 5; level.player enabledeathshield( 0 ); } } kill_trigger_setup() { var_0 = getentarray( "dz_kill_triggers", "script_noteworthy" ); common_scripts\utility::array_thread( var_0, maps\_utility::show_entity ); var_1 = getent( "dz_kill_vol_right", "targetname" ); var_2 = getent( "dz_kill_vol_front", "targetname" ); var_3 = getent( "dz_kill_vol_rear", "targetname" ); var_4 = [ var_1, var_2, var_3 ]; thread kill_trigger( var_4, "dz_warning_right", "dz_warning_front", "dz_warning_rear" ); common_scripts\utility::flag_wait( "knockdown_moment" ); common_scripts\utility::array_thread( var_0, maps\_utility::hide_entity ); } kill_trigger( var_0, var_1, var_2, var_3 ) { level endon( "knockdown_moment" ); for (;;) { common_scripts\utility::flag_wait_any( var_1, var_2, var_3 ); level.player thread maps\carrier_depth_charge::depth_charge_remove_control(); maps\_utility::smart_radio_dialogue_interrupt( "carrier_hsh_regrouponme" ); if ( level.player is_touching_any( var_0 ) ) { wait 1.5; maps\_utility::smart_radio_dialogue_interrupt( "carrier_hsh_moveyourasslogan" ); if ( level.player is_touching_any( var_0 ) ) { wait 1.5; maps\_utility::smart_radio_dialogue_interrupt( "carrier_hsh_logangetoverhere" ); if ( level.player is_touching_any( var_0 ) ) { wait 1; setdvar( "ui_deadquote", &"CARRIER_FAIL_FAR_AWAY" ); maps\_utility::missionfailedwrapper(); } } } if ( common_scripts\utility::flag( "defend_osprey_online" ) && !maps\carrier_code::eval( level.player.osprey_control ) ) level.player thread maps\carrier_depth_charge::depth_charge_give_control(); common_scripts\utility::flag_clear( var_1 ); common_scripts\utility::flag_clear( var_2 ); common_scripts\utility::flag_clear( var_3 ); wait 0.05; } } is_touching_any( var_0 ) { foreach ( var_2 in var_0 ) { if ( self istouching( var_2 ) ) return 1; } return 0; }