// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool carrier_init() { precacheshader( "white" ); precacheshader( "overlay_rain" ); precacheshader( "overlay_rain_large" ); precacheshader( "overlay_rain_large_02" ); precacheshader( "overlay_rain_small" ); precacheshader( "overlay_rain_small_02" ); precacheshader( "ac130_hud_friendly_ai_diamond_s_w" ); precacheshader( "ac130_hud_enemy_ai_target_s_w" ); precacheshader( "ac130_hud_enemy_vehicle_target_s_w" ); precacheturret( "phalanx_turret" ); thread carrier_post_load(); thread gameskill_settings(); level.water_level = 720; level.cached_arcs = []; } carrier_post_load() { level waittill( "load_finished" ); } setup_common( var_0 ) { thread setup_front_elevator(); thread balcony_kill_trigger(); thread water_kill_trigger(); thread deck_tilt_water_kill_trigger(); thread update_sun(); thread update_deck_post_intro(); thread setup_ocean_vista_tilt(); thread vista_oil_slicks(); thread run_destructibles(); thread setup_island_flag(); setup_player(); if ( !isdefined( var_0 ) || !var_0 ) { thread phalanx_gun_fire( "crr_phalanx_01" ); thread phalanx_gun_fire( "crr_phalanx_02" ); thread phalanx_gun_fire( "crr_phalanx_03" ); thread phalanx_gun_fire( "crr_phalanx_04" ); thread phalanx_gun_fire( "crr_phalanx_05" ); } anim.fire_notetrack_functions["drone"] = maps\carrier_code_zodiac::drone_shoot; } setup_player() { var_0 = level.start_point + "_start"; var_1 = common_scripts\utility::getstruct( var_0, "targetname" ); if ( isdefined( var_1 ) ) { level.player setorigin( var_1.origin ); if ( isdefined( var_1.angles ) ) level.player setplayerangles( var_1.angles ); else iprintlnbold( "Your script_struct " + level.start_point + "_start has no angles! Set some." ); } else { } } spawn_allies() { level.allies = []; level.allies[level.allies.size] = spawn_ally( "hesh" ); level.allies[level.allies.size - 1].animname = "hesh"; level.hesh = level.allies[level.allies.size - 1]; level.hesh maps\_utility::make_hero(); } spawn_ally( var_0, var_1 ) { var_2 = undefined; if ( !isdefined( var_1 ) ) var_2 = level.start_point + "_" + var_0; else var_2 = var_1 + "_" + var_0; var_3 = spawn_targetname_at_struct_targetname( var_0, var_2 ); if ( !isdefined( var_3 ) ) return undefined; var_3 maps\_utility::make_hero(); if ( !isdefined( var_3.magic_bullet_shield ) ) var_3 maps\_utility::magic_bullet_shield(); return var_3; } gameskill_settings() { level.difficultysettings["gunboat_aiSpread"]["easy"] = 4; level.difficultysettings["gunboat_aiSpread"]["normal"] = 3; level.difficultysettings["gunboat_aiSpread"]["hardened"] = 0.75; level.difficultysettings["gunboat_aiSpread"]["veteran"] = 0.2; level.difficultysettings["gunboat_convergenceTime"]["easy"] = 6; level.difficultysettings["gunboat_convergenceTime"]["normal"] = 3; level.difficultysettings["gunboat_convergenceTime"]["hardened"] = 1; level.difficultysettings["gunboat_convergenceTime"]["veteran"] = 0.33; level.difficultysettings["zodiac_rider_playerHitRatio"]["easy"] = 0.3; level.difficultysettings["zodiac_rider_playerHitRatio"]["normal"] = 0.4; level.difficultysettings["zodiac_rider_playerHitRatio"]["hardened"] = 0.45; level.difficultysettings["zodiac_rider_playerHitRatio"]["veteran"] = 0.75; level.difficultysettings["rappeler_playerHitRatio"]["easy"] = 3; level.difficultysettings["rappeler_playerHitRatio"]["normal"] = 5; level.difficultysettings["rappeler_playerHitRatio"]["hardened"] = 6; level.difficultysettings["rappeler_playerHitRatio"]["veteran"] = 12; level.difficultysettings["osprey_hitsToSucceed"]["easy"] = 0; level.difficultysettings["osprey_hitsToSucceed"]["normal"] = 1; level.difficultysettings["osprey_hitsToSucceed"]["hardened"] = 10; level.difficultysettings["osprey_hitsToSucceed"]["veteran"] = 20; } nag_until_flag( var_0, var_1, var_2, var_3, var_4 ) { if ( common_scripts\utility::flag( var_1 ) ) return; for ( var_5 = -1; !common_scripts\utility::flag( var_1 ); var_3 = var_3 + var_4 ) { var_6 = randomfloatrange( var_2, var_3 ); wait( var_6 ); var_7 = randomint( var_0.size ); if ( var_7 == var_5 ) { var_7++; if ( var_7 >= var_0.size ) var_7 = 0; } var_8 = var_0[var_7]; if ( common_scripts\utility::flag( var_1 ) ) break; thread maps\_utility::smart_radio_dialogue( var_8 ); var_5 = var_7; var_2 = var_2 + var_4; } } #using_animtree("generic_human"); carrier_life_jet_takeoff_guys( var_0, var_1, var_2, var_3, var_4, var_5 ) { var_6 = common_scripts\utility::getstruct( "redshirt_forklift_stopper_ref", "targetname" ); var_7 = maps\_utility::spawn_targetname( var_0 ); var_7.animname = var_1; var_7.runanim = maps\_utility::getgenericanim( "unarmed_run" ); var_7 maps\_utility::magic_bullet_shield( 1 ); var_7 maps\_utility::gun_remove(); var_8 = getanimlength( level.scr_anim[var_1][var_3] ); var_9 = var_5 / var_8; var_6 thread maps\_anim::anim_single_solo( var_7, var_3 ); common_scripts\utility::waitframe(); var_7 setanimtime( level.scr_anim[var_1][var_3], var_9 ); var_7 waittillmatch( "single anim", "end" ); var_7.target = var_2; if ( isdefined( var_4 ) ) var_7 maps\_utility::set_moveplaybackrate( var_4 ); else var_7 maps\_utility::set_moveplaybackrate( 1 ); var_7.idleanim = %unarmed_cowercrouch_idle; var_7 thread maps\_drone::drone_move(); var_7 thread safe_delete_drone( 1500 ); } carrier_life_jet_takeoff_jet( var_0, var_1, var_2, var_3, var_4 ) { var_5 = common_scripts\utility::getstruct( "redshirt_forklift_stopper_ref", "targetname" ); var_6 = maps\_vehicle::spawn_vehicle_from_targetname( var_0 ); var_6.animname = var_1; if ( isdefined( var_4 ) ) { var_5 thread maps\_anim::anim_first_frame_solo( var_6, var_2 ); wait( var_4 ); } var_6 thread maps\carrier_fx::handle_jet_launch_fx(); var_7 = getanimlength( level.scr_anim[var_1][var_2] ); var_8 = var_3 / var_7; var_5 thread maps\_anim::anim_single_solo( var_6, var_2 ); common_scripts\utility::waitframe(); var_6 setanimtime( level.scr_anim[var_1][var_2], var_8 ); var_6 waittillmatch( "single anim", "end" ); thread maps\_vehicle::gopath( var_6 ); var_9 = [ var_6 ]; thread maps\_utility::ai_delete_when_out_of_sight( var_9, 20000 ); } setup_jet_and_clip( var_0, var_1, var_2, var_3 ) { var_4 = undefined; var_5 = undefined; var_6 = undefined; var_7 = undefined; var_8 = getentarray( var_0, "targetname" ); foreach ( var_10 in var_8 ) { if ( var_10.script_noteworthy == "item" ) var_4 = var_10; if ( var_10.script_noteworthy == "clip" ) var_5 = var_10; if ( var_10.script_noteworthy == "clip_l" ) var_6 = var_10; if ( var_10.script_noteworthy == "clip_r" ) var_7 = var_10; } var_12 = var_4 gettagorigin( "le_wing_fold_jnt" ); var_13 = var_4 gettagorigin( "ri_wing_fold_jnt" ); var_5.origin = var_4.origin; var_6.origin = var_12; var_7.origin = var_13; var_5 linkto( var_4, "tag_body" ); var_6 linkto( var_4, "le_wing_fold_jnt" ); var_7 linkto( var_4, "ri_wing_fold_jnt" ); if ( isdefined( var_1 ) ) { var_5 thread maps\carrier_deck_tilt::player_hit_detect( var_1, var_2, var_3 ); var_6 thread maps\carrier_deck_tilt::player_hit_detect( var_1, var_2, var_3 ); var_7 thread maps\carrier_deck_tilt::player_hit_detect( var_1, var_2, var_3 ); } return var_4; } setup_island_flag() { var_0 = getent( "island_flag", "targetname" ); var_0.animname = "flag"; var_0 maps\_anim::setanimtree(); var_1 = common_scripts\utility::getstruct( "deck_tilt_animnode", "targetname" ); var_1 thread maps\_anim::anim_loop_solo( var_0, "carrier_flag_idle", "stop_flag" ); common_scripts\utility::flag_wait( "start_main_odin_strike" ); var_1 notify( "stop_flag" ); var_1 maps\_anim::anim_single_solo( var_0, "carrier_deck_tilt_flag" ); var_0 delete(); } clear_deck_props() { wait 0.1; if ( level.start_point != "slow_intro" && level.start_point != "medbay" && level.start_point != "deck_combat" && level.start_point != "defend_zodiac" ) { var_0 = getent( "anim_jet_launcher1", "targetname" ); var_0 hide(); var_1 = getent( "anim_jet_launcher2", "targetname" ); var_1 hide(); } if ( level.start_point != "slow_intro" && level.start_point != "medbay" && level.start_point != "deck_combat" && level.start_point != "deck_transition" ) { var_2 = getent( "taxing_osprey_clip", "targetname" ); var_2 delete(); } } move_deck_props() { wait 0.1; if ( level.start_point != "deck_victory" && level.start_point != "deck_tilt" ) common_scripts\utility::flag_wait( "defend_sparrow_start" ); level notify( "deleting_ammo_refill" ); level.deck_damage = getentarray( "deck_damaged", "targetname" ); common_scripts\utility::array_thread( level.deck_damage, maps\_utility::show_entity ); foreach ( var_1 in level.deck_damage ) var_1 movez( -4096, 0.05 ); var_3 = getentarray( "tower_damage", "targetname" ); foreach ( var_1 in var_3 ) var_1 movez( -4096, 0.05 ); var_6 = getentarray( "tower_panel_clean", "targetname" ); common_scripts\utility::array_thread( var_6, maps\_utility::show_entity ); foreach ( var_1 in var_6 ) var_1 movez( -4096, 0.05 ); var_9 = getentarray( "deck_tilt_clip", "targetname" ); foreach ( var_1 in var_9 ) var_1 movez( -4096, 0.05 ); var_12 = getent( "blast_shield1", "targetname" ); var_12 rotateto( ( 0, 0, -65 ), 0.5 ); level.deck_clean = getentarray( "deck_clean", "targetname" ); level.blast_shield = getent( "blast_shield2", "targetname" ); maps\_utility::array_delete( level.deck_clean ); level.blast_shield delete(); var_13 = getent( "deck_tilt_tugger_1", "targetname" ); var_14 = getent( "deck_tilt_tugger_1_clip", "targetname" ); var_15 = getent( "deck_tilt_tugger_1_mantle", "targetname" ); var_13 movez( 120, 0.05 ); var_14 movez( 120, 0.05 ); var_15 movez( 120, 0.05 ); var_16 = getentarray( "sliding_crate_01b", "targetname" ); foreach ( var_1 in var_16 ) var_1 movey( 192, 0.05 ); var_19 = getweaponarray(); maps\_utility::array_delete( var_19 ); var_20 = getentarray( "stern_corner_dmg", "targetname" ); foreach ( var_1 in var_20 ) { if ( var_1.classname == "script_model" && var_1.model == "crr_blastholes_01" ) var_1 delete(); } var_23 = getent( "blast_shield4", "targetname" ); var_24 = getent( "blast_shield5", "targetname" ); var_25 = getent( "blast_shield6", "targetname" ); var_23 delete(); var_24 delete(); var_25 delete(); var_26 = getent( "depth_charge_cart", "targetname" ); var_27 = getent( "depth_charge_cart_clip", "targetname" ); var_26 delete(); var_27 delete(); var_28 = getentarray( "front_elevator_jet", "targetname" ); maps\_utility::array_delete( var_28 ); level.exploding_heli maps\_utility::show_entity(); var_29 = getentarray( "rear_forklift1", "targetname" ); foreach ( var_1 in var_29 ) var_1 delete(); var_32 = getentarray( "anim_tugger", "targetname" ); maps\_utility::array_delete( var_32 ); foreach ( var_34 in level.rear_elevator.attachments ) { if ( isdefined( var_34 ) ) var_34 delete(); } var_36 = getentarray( "carrier_elevator_front_scripted_attachments", "targetname" ); foreach ( var_34 in var_36 ) { if ( isdefined( var_34 ) ) var_34 delete(); } var_39 = getentarray( "deck_weapons", "script_noteworthy" ); maps\_utility::array_delete( var_39 ); var_40 = getentarray( "deck_props_delete", "targetname" ); maps\_utility::array_delete( var_40 ); var_41 = getentarray( "odin_carts", "targetname" ); maps\_utility::array_delete( var_41 ); maps\_utility::array_delete( level.deck_ac130_dmg ); if ( isdefined( level.deck_ac130_dmg_badplace_size ) ) { for ( var_42 = 0; var_42 < level.deck_ac130_dmg_badplace_size; var_42++ ) badplace_delete( "deck_ac130_dmg_badplace" + var_42 ); } maps\_utility::array_delete( level.deck_ac130_dmg_clip ); maps\_utility::array_delete( level.dz_deck_explode_dmg ); var_43 = getscriptablearray( "scriptable_destructible_barrel", "targetname" ); foreach ( var_1 in var_43 ) var_1 setscriptablepartstate( 0, 2, 1 ); thread maps\carrier_deck_tilt::tilt_props_large(); thread maps\carrier_deck_tilt::tilt_props_medium(); thread maps\carrier_deck_tilt::tilt_props_odin_jet(); thread maps\carrier_deck_tilt::tilt_props_elevator(); thread maps\carrier_deck_tilt::tilt_props_impact_barrels(); thread maps\carrier_deck_tilt::tilt_props_impact_x30(); thread maps\carrier_deck_tilt::tilt_props_tugger_vault(); thread maps\carrier_deck_tilt::tilt_props_tugger3(); thread maps\carrier_deck_tilt::tilt_props_tugger4(); thread maps\carrier_deck_tilt::tilt_props_barrels_x3( "gp3_group_a", "carrier_deck_tilt_barrels1_gp_a" ); thread maps\carrier_deck_tilt::tilt_props_barrels_x3( "gp3_group_b", "carrier_deck_tilt_barrels1_gp_b" ); thread maps\carrier_deck_tilt::tilt_props_barrels_x30(); var_46 = getentarray( "ally_movement_triggers_deckcombat", "script_noteworthy" ); maps\_utility::array_delete( var_46 ); var_47 = getentarray( "kill_triggers", "script_noteworthy" ); maps\_utility::array_delete( var_47 ); thread tilt_ocean_fx_setup(); } tilt_ocean_fx_setup() { } setup_front_elevator() { var_0 = getent( "carrier_elevator_front_scripted", "targetname" ); level.front_elevator_vol = getent( "elevator_touching_vol", "targetname" ); var_1 = getentarray( "carrier_elevator_front_scripted_attachments", "targetname" ); foreach ( var_3 in var_1 ) var_3 linkto( var_0 ); var_5 = common_scripts\utility::getstruct( "redshirt_forklift_stopper_ref", "targetname" ); var_6 = maps\_utility::spawn_anim_model( "front_elevator" ); var_5 maps\_anim::anim_first_frame_solo( var_6, "tugger_scene_enter" ); var_7 = var_6 gettagorigin( "j_prop_1" ); var_8 = var_6 gettagangles( "j_prop_1" ); var_0.origin = var_7; var_0.angles = var_8; var_0 linkto( var_6, "j_prop_1" ); if ( level.start_point == "slow_intro" || level.start_point == "medbay" || level.start_point == "deck_combat" ) { common_scripts\utility::flag_wait( "combat_1_kick" ); var_9 = level.front_elevator_vol maps\_utility::get_ai_touching_volume(); foreach ( var_11 in var_9 ) var_11 linkto( var_0 ); common_scripts\utility::waitframe(); var_5 maps\_anim::anim_single_solo( var_6, "tugger_scene_enter" ); common_scripts\utility::flag_set( "front_elevator_raised" ); foreach ( var_11 in var_9 ) { if ( isdefined( var_11 ) && isalive( var_11 ) ) var_11 unlink(); } } else var_5 maps\_anim::anim_last_frame_solo( var_6, "tugger_scene_enter" ); } setup_rear_elevator() { level.rear_elevator = getent( "carrier_elevator_rear_scripted", "targetname" ); level.rear_elevator.lowered = 1; level.rear_elevator.height = 342; level.rear_elevator.time = 25; level.rear_elevator_vol = getent( "rear_elevator_touching_vol", "targetname" ); level.rear_elevator.attachments = getentarray( "carrier_elevator_rear_scripted_attachments", "targetname" ); foreach ( var_1 in level.rear_elevator.attachments ) var_1 linkto( level.rear_elevator ); if ( level.start_point != "slow_intro" && level.start_point != "medbay" && level.start_point != "deck_combat" ) { level.rear_elevator.lowered = 0; foreach ( var_1 in level.rear_elevator.attachments ) { if ( isdefined( var_1 ) ) { var_1 unlink(); if ( isdefined( var_1.script_noteworthy ) && var_1.script_noteworthy == "clip" ) var_1 disconnectpaths(); } } common_scripts\utility::flag_set( "rear_elevator_raised" ); } else reset_rear_elevator(); } raise_rear_elevator() { if ( level.rear_elevator.lowered ) { var_0 = level.rear_elevator_vol maps\_utility::get_ai_touching_volume(); foreach ( var_2 in var_0 ) var_2 linkto( level.rear_elevator ); var_4 = level.rear_elevator.height; var_5 = level.rear_elevator.time; level.rear_elevator moveto( level.rear_elevator.origin + ( 0, 0, var_4 ), var_5, 2, 2 ); thread maps\carrier_audio::aud_carr_elevator_rear(); wait( var_5 ); level.rear_elevator.lowered = 0; foreach ( var_2 in var_0 ) { if ( isdefined( var_2 ) && isalive( var_2 ) ) var_2 unlink(); } foreach ( var_9 in level.rear_elevator.attachments ) { if ( isdefined( var_9 ) ) { var_9 unlink(); if ( isdefined( var_9.script_noteworthy ) && var_9.script_noteworthy == "clip" ) var_9 disconnectpaths(); } } common_scripts\utility::flag_set( "rear_elevator_raised" ); thread maps\carrier_audio::aud_carr_osprey_engines(); } } reset_rear_elevator() { level.rear_elevator.lowered = 1; level.rear_elevator moveto( level.rear_elevator.origin - ( 0, 0, level.rear_elevator.height ), 0.05, 0, 0 ); } raise_rear_elevator_intro() { if ( level.rear_elevator.lowered ) { var_0 = level.rear_elevator.height; var_1 = 15; level.rear_elevator moveto( level.rear_elevator.origin + ( 0, 0, var_0 ), var_1, 2, 2 ); } } balcony_kill_trigger() { common_scripts\utility::flag_wait( "lower_balcony_kill_trigger" ); thread maps\_hud_util::fade_out( 1.5, "black" ); level.player kill(); } water_kill_trigger() { common_scripts\utility::flag_wait( "fall_water_kill_trigger" ); thread maps\_hud_util::fade_out( 1.5, "black" ); level.player kill(); } deck_tilt_water_kill_trigger() { var_0 = getent( "water_kill_clip", "targetname" ); for (;;) { if ( level.player istouching( var_0 ) || common_scripts\utility::flag( "tilt_water_kill_trigger" ) ) { thread maps\_hud_util::fade_out( 1.5, "black" ); level.player kill(); return; } else common_scripts\utility::waitframe(); } } setup_ocean_vista_tilt() { level.ocean_water = getent( "ocean_water", "targetname" ); level.vista_rig = maps\_utility::spawn_anim_model( "tilt_vista" ); level.vista_rig.origin = level.ocean_water.origin; level.vista_rig.angles = ( 0, 0, 0 ); level.vista_rig maps\_anim::anim_first_frame_solo( level.vista_rig, "carrier_deck_tilt_world" ); level.ocean_water linkto( level.vista_rig, "j_prop_1" ); var_0 = getent( "tilt_water_death_trigger", "targetname" ); var_1 = getent( "water_kill_clip", "targetname" ); var_0 enablelinkto(); var_0 linkto( level.vista_rig, "j_prop_1" ); var_1 linkto( level.vista_rig, "j_prop_1" ); var_2 = getentarray( "vista_terrain", "targetname" ); foreach ( var_4 in var_2 ) var_4 linkto( level.ocean_water ); var_6 = common_scripts\utility::getstruct( "deck_tilt_animnode", "targetname" ); level.exfil_animnode = var_6 common_scripts\utility::spawn_tag_origin(); level.tilt_sky = getent( "carrier_tilt_sky", "targetname" ); level.tilt_sky linkto( level.ocean_water ); level.tilt_sky hide(); level.tilt_ground_ref = getent( "player_ref_ent", "targetname" ); level.tilt_ground_ref linkto( level.ocean_water ); if ( level.start_point != "deck_tilt" && level.start_point != "deck_victory" ) common_scripts\utility::flag_wait( "sparrow_hud_black" ); level.tilt_sky show(); common_scripts\utility::flag_wait( "start_main_odin_strike" ); level.player playersetgroundreferenceent( level.tilt_ground_ref ); } vista_tilt() { level.sun_angles_deck_tilt_end = ( -30.5, -73, 0 ); var_0 = ( -16.5, 2, 0 ); var_1 = 400; var_2 = 30; level.vista_rig thread maps\_anim::anim_single_solo( level.vista_rig, "carrier_deck_tilt_world" ); level.exfil_animnode rotateto( var_0, 0.05 ); lerpsunangles( level.sun_angles_deck_tilt, level.sun_angles_deck_tilt_end, var_2 ); } vista_boats() { level.boats = getentarray( "all_boats", "script_noteworthy" ); thread setup_fed_destroyer_osprey(); foreach ( var_1 in level.boats ) var_1 thread vista_boat_animate(); } setup_fed_destroyer_osprey() { level.fed_destroyer_clip linkto( level.fed_destroyer_osprey ); common_scripts\utility::array_call( level.fed_destroyer_fx_guns, ::linkto, level.fed_destroyer_osprey ); common_scripts\utility::array_call( level.destroyer_guy_nodes, ::linkto, level.fed_destroyer_osprey ); } vista_boat_animate() { thread attach_deck_gun(); var_0 = maps\_utility::spawn_anim_model( "boat", self.origin ); self.rig = var_0; var_1 = 704; if ( self.model == "crr_destroyer_01_left" || self.model == "crr_destroyer_01_right" || self.model == "crr_destroyer_01" ) var_0.origin = ( var_0.origin[0], var_0.origin[1], var_1 ); else if ( self.model == "crr_destroyer_02_fed" ) var_0.origin = ( var_0.origin[0], var_0.origin[1], var_1 - 1236 ); else var_0.origin = ( var_0.origin[0], var_0.origin[1], -64 ); var_0.angles = self.angles; self linkto( var_0, "j_prop_1", ( 0, 0, 0 ), ( 0, 0, 0 ) ); common_scripts\utility::waitframe(); var_0 thread maps\_anim::anim_loop_solo( var_0, "carrier_destroyer_idle", "stop_loop" ); common_scripts\utility::waitframe(); var_0 setanimtime( level.scr_anim["boat"]["carrier_destroyer_idle"][0], randomfloat( 0.75 ) ); common_scripts\utility::flag_wait( "start_main_odin_strike" ); var_0 linkto( level.ocean_water ); } attach_deck_gun() { if ( isdefined( self.target ) ) { self.gun = getent( self.target, "targetname" ); self.gun linkto( self ); if ( isdefined( self.gun.target ) ) { self.gun.fx = getent( self.gun.target, "targetname" ); self.gun.fx linkto( self.gun ); level.fed_destroyer_fx_guns = common_scripts\utility::array_add( level.fed_destroyer_fx_guns, self.gun.fx ); } } } vista_oil_slicks() { var_0 = getentarray( "ocean_water_slick", "targetname" ); if ( level.start_point == "slow_intro" ) { common_scripts\utility::array_thread( var_0, maps\_utility::hide_entity ); common_scripts\utility::flag_wait( "slow_intro_finished" ); common_scripts\utility::array_thread( var_0, maps\_utility::show_entity ); } if ( level.start_point == "slow_intro" || level.start_point == "medbay" ) common_scripts\utility::flag_wait( "medbay_finished" ); common_scripts\utility::array_thread( var_0, ::vista_element_move ); } vista_element_move() { level endon( "odin_strike_starting" ); var_0 = 67488; var_1 = 240; var_2 = var_0 - self.origin[1]; var_3 = var_2 / var_1; thread vista_element_link(); if ( level.start_point == "defend_zodiac" ) { self movey( var_2 * 0.2, 0.05, 0, 0 ); wait 0.05; var_2 = var_0 - self.origin[1]; } if ( level.start_point == "defend_sparrow" || level.start_point == "deck_victory" ) { self movey( var_2 * 0.4, 0.05, 0, 0 ); wait 0.05; var_2 = var_0 - self.origin[1]; } if ( level.start_point == "deck_tilt" ) { self movey( var_2 * 0.7, 0.05, 0, 0 ); wait 0.05; var_2 = var_0 - self.origin[1]; } if ( isdefined( self ) ) self movey( var_2, var_3, 0, 0 ); wait( var_3 ); if ( isdefined( self ) ) self delete(); } vista_element_link() { level waittill( "odin_strike_starting" ); if ( isdefined( self ) ) self linkto( level.ocean_water ); } ocean_death() { level endon( "death" ); level endon( "no_water_death" ); for (;;) { if ( level.player istouching( self ) ) { level.player dodamage( level.player.health + 100, level.player.origin ); continue; } wait 0.05; } } rod_of_god_carrier() { var_0 = common_scripts\utility::getstruct( "deck_tilt_animnode", "targetname" ); var_1 = maps\_utility::spawn_anim_model( "tilt_rog" ); var_0 thread maps\_anim::anim_single_solo( var_1, "carrier_deck_tilt_RoG_prop" ); level.player playrumbleonentity( "carrier_rod_of_god" ); var_2 = common_scripts\utility::getstruct( "rog_target_carrier", "targetname" ); playfxontag( level._effect["vfx_rog_trail"], var_1, "tag_origin" ); var_1 waittillmatch( "single anim", "tower_impact" ); common_scripts\utility::exploder( 90000 ); var_1 waittillmatch( "single anim", "corner_impact" ); common_scripts\utility::flag_set( "tower_corner_hit" ); var_1 waittillmatch( "single anim", "deck_impact" ); common_scripts\utility::flag_set( "rog_impacts_deck" ); screenshake( level.player.origin, 3, 2, 2, 2.5, 0, 2.0, 256, 8, 15, 12, 5.0 ); var_1 waittillmatch( "single anim", "water_impact" ); var_3 = getent( "carrier_odin_water_impact", "targetname" ); var_3 linkto( level.ocean_water ); var_1 waittillmatch( "single anim", "end" ); var_1 delete(); } rod_of_god_carrier_front() { var_0 = common_scripts\utility::getstruct( "deck_tilt_animnode", "targetname" ); var_1 = maps\_utility::spawn_anim_model( "tilt_rog" ); var_0 thread maps\_anim::anim_single_solo( var_1, "carrier_exfil_2nd_RoG_GP" ); level.player playrumbleonentity( "carrier_rod_of_god" ); var_2 = common_scripts\utility::getstruct( "rog_front_impact", "targetname" ); playfxontag( level._effect["vfx_rog_trail"], var_1, "tag_origin" ); var_1 waittillmatch( "single anim", "impact_deck" ); common_scripts\utility::flag_set( "carrier_front_impact" ); stopfxontag( level._effect["vfx_rog_trail"], var_1, "tag_origin" ); thread maps\carrier_audio::aud_carr_exfil_rog(); common_scripts\utility::exploder( 6002 ); screenshake( level.player.origin, 4, 3, 3, 2.5, 0, 2.0, 256, 8, 15, 12, 1.8 ); var_1 waittillmatch( "single anim", "end" ); var_1 delete(); } player_slide_manager() { level.x_slide_incr = 0; level.damage_slide_incr = 0; level.damage_slide_time = 0; for (;;) { if ( !common_scripts\utility::flag( "damage_slide" ) ) { level.player pushplayervector( ( level.x_slide_incr, 0, 0 ) ); wait 0.05; continue; } level.player pushplayervector( ( level.damage_slide_incr + level.x_slide_incr, 0, 0 ) ); wait( level.damage_slide_time ); level.player pushplayervector( ( level.x_slide_incr, 0, 0 ) ); level.damage_slide_incr = 0; level.damage_slide_time = 0; common_scripts\utility::flag_clear( "damage_slide" ); } } player_gravity_slide() { level endon( "player_in_heli" ); while ( abs( level.tilt_ground_ref.angles[0] ) > 352 ) { var_0 = level.player getnormalizedmovement(); if ( abs( var_0[0] ) > 0.1 ) level.x_slide_incr = 2; else level.x_slide_incr = 0; wait 0.05; } level.x_slide_incr = 2; while ( abs( level.tilt_ground_ref.angles[0] ) >= 343.5 ) { level.x_slide_incr = level.x_slide_incr + 0.1; wait 0.1; iprintln( "Tilt angle is " + level.tilt_ground_ref.angles ); } } player_gravity_slide_punish() { level endon( "end_player_slide" ); while ( abs( level.tilt_ground_ref.angles[0] ) <= 17 ) { level.x_slide_incr = level.x_slide_incr + 0.15; wait 0.1; } } player_slide_fall() { level endon( "player_in_heli" ); level.player setstance( "stand" ); level.player allowcrouch( 0 ); level.player allowprone( 0 ); level.player disableweapons(); level.player freezecontrols( 1 ); var_0 = getent( "touching_ladder", "targetname" ); if ( !level.player istouching( var_0 ) && level.player.origin[2] < 1410 && level.player.origin[2] > 1390 ) { var_1 = maps\_utility::spawn_anim_model( "player_rig", ( level.player.origin[0], level.player.origin[1], 1400 ) ); var_1.angles = ( 0, 90, 0 ); var_1 thread player_fade_out_trace(); level.player playerlinktoblend( var_1, "tag_player", 0.3 ); var_1 maps\_anim::anim_single_solo( var_1, "carrier_player_slide" ); } else { level.player dodamage( level.player.health * 0.9, level.player.origin + ( 0, 0, 72 ) ); setdvar( "ui_deadquote", &"CARRIER_FAIL_DECK_TILT" ); maps\_utility::missionfailedwrapper(); } } player_fade_out_trace() { while ( !common_scripts\utility::flag( "slide_fade_out" ) ) { var_0 = self.origin + ( 16, 0, 8 ); var_1 = self.origin + ( 100, 0, 8 ); var_2 = playerphysicstrace( var_0, var_1 ); if ( var_2 != var_1 ) common_scripts\utility::flag_set( "slide_fade_out" ); common_scripts\utility::waitframe(); } } ai_cleanup_fake_death( var_0 ) { var_1 = getentarray( var_0, "script_noteworthy" ); foreach ( var_3 in var_1 ) { if ( isai( var_3 ) && isalive( var_3 ) ) { if ( isdefined( var_3.script_noteworthy ) && var_3.script_noteworthy == var_0 ) var_3 thread maps\ss_util::fake_death_bullet( 1.5 ); continue; } if ( !isspawner( var_3 ) && isalive( var_3 ) && isdefined( var_3.script_drone ) && var_3.script_drone ) var_3 dodamage( var_3.health, var_3.origin ); } } array_spawn_targetname_allow_fail( var_0, var_1 ) { var_2 = getentarray( var_0, "targetname" ); var_3 = array_spawn_allow_fail( var_2 ); return var_3; } array_spawn_allow_fail( var_0, var_1 ) { var_2 = []; foreach ( var_4 in var_0 ) { var_4.count = 1; var_5 = var_4 maps\_utility::spawn_ai( var_1 ); if ( isdefined( var_5 ) ) var_2[var_2.size] = var_5; } return var_2; } retreat_from_vol_to_vol( var_0, var_1, var_2, var_3 ) { var_4 = getent( var_0, "targetname" ); var_5 = var_4 maps\_utility::get_ai_touching_volume( "axis" ); var_6 = getent( var_1, "targetname" ); var_7 = getnode( var_6.target, "targetname" ); foreach ( var_9 in var_5 ) { if ( isdefined( var_9 ) && isalive( var_9 ) ) { if ( issubstr( var_9.model, "shotgun" ) ) return; var_9.forcegoal = 0; var_9.fixednode = 0; var_9.pathrandompercent = randomintrange( 75, 100 ); var_9 setgoalnode( var_7 ); var_9 setgoalvolumeauto( var_6 ); } } } ai_array_killcount_flag_set( var_0, var_1, var_2, var_3 ) { maps\_utility::waittill_dead_or_dying( var_0, var_1, var_3 ); common_scripts\utility::flag_set( var_2 ); } check_trigger_flagset( var_0 ) { var_1 = getent( var_0, "targetname" ); var_1 waittill( "trigger" ); if ( isdefined( var_1.script_flag_set ) ) common_scripts\utility::flag_set( var_1.script_flag_set ); } run_to_volume_and_delete( var_0 ) { self endon( "death" ); if ( isdefined( self ) ) { self setgoalvolumeauto( getent( var_0, "targetname" ) ); self waittill( "goal" ); waittill_player_not_looking(); self delete(); } } ignore_everything( var_0 ) { self endon( "death" ); self.ignoreall = 1; self.ignoreme = 1; self.grenadeawareness = 0; self.ignoreexplosionevents = 1; self.ignorerandombulletdamage = 1; self.ignoresuppression = 1; self.disablebulletwhizbyreaction = 1; maps\_utility::disable_pain(); self.dontavoidplayer = 1; self.og_newenemyreactiondistsq = self.newenemyreactiondistsq; self.newenemyreactiondistsq = 0; if ( isdefined( var_0 ) && var_0 != 0.0 ) { wait( var_0 ); clear_ignore_everything(); } } clear_ignore_everything() { self.ignoreall = 0; self.ignoreme = 0; self.grenadeawareness = 1; self.ignoreexplosionevents = 0; self.ignorerandombulletdamage = 0; self.ignoresuppression = 0; self.disablebulletwhizbyreaction = 0; maps\_utility::enable_pain(); self.dontavoidplayer = 0; self.script_dontpeek = 0; if ( isdefined( self.og_newenemyreactiondistsq ) ) self.newenemyreactiondistsq = self.og_newenemyreactiondistsq; } anim_fake_loop_endon( var_0, var_1, var_2 ) { var_0 endon( "death" ); var_0 endon( "endon_flag" ); while ( isdefined( var_0 ) ) maps\_anim::anim_single_solo( var_0, var_1 ); } stop_anim_fake_loop( var_0, var_1 ) { var_0 endon( "death" ); common_scripts\utility::flag_wait( var_1 ); if ( isdefined( var_0 ) ) var_0 stopanimscripted(); } safe_kill() { self endon( "death" ); self kill(); } spawn_targetname_at_struct_targetname( var_0, var_1 ) { var_2 = getent( var_0, "targetname" ); var_3 = common_scripts\utility::getstruct( var_1, "targetname" ); if ( isdefined( var_2 ) && isdefined( var_3 ) ) { var_2.origin = var_3.origin; if ( isdefined( var_3.angles ) ) var_2.angles = var_3.angles; var_4 = var_2 maps\_utility::spawn_ai(); return var_4; } if ( isdefined( var_2 ) ) { var_4 = var_2 maps\_utility::spawn_ai(); iprintlnbold( "Add a script struct called: " + var_1 + " to spawn him in the correct location." ); var_4 teleport( level.player.origin, level.player.angles ); return var_4; } iprintlnbold( "failed to spawn " + var_0 + " at " + var_1 ); return undefined; } targetname_spawn( var_0 ) { var_1 = getentarray( var_0, "targetname" ); common_scripts\utility::array_thread( var_1, maps\_utility::spawn_ai ); } array_combine_unique( var_0, var_1 ) { var_2 = []; foreach ( var_4 in var_0 ) { if ( !isdefined( common_scripts\utility::array_find( var_2, var_4 ) ) ) var_2[var_2.size] = var_4; } foreach ( var_4 in var_1 ) { if ( !isdefined( common_scripts\utility::array_find( var_2, var_4 ) ) ) var_2[var_2.size] = var_4; } return var_2; } set_black_fade( var_0, var_1 ) { level notify( "set_black_fade", var_0, var_1 ); level endon( "set_black_fade" ); if ( !isdefined( var_0 ) ) var_0 = 1; var_0 = max( 0.0, min( 1.0, var_0 ) ); if ( !isdefined( var_1 ) ) var_1 = 1; var_1 = max( 0.01, var_1 ); if ( !isdefined( level.hud_black ) ) { level.hud_black = newhudelem(); level.hud_black.x = 0; level.hud_black.y = 0; level.hud_black.horzalign = "fullscreen"; level.hud_black.vertalign = "fullscreen"; level.hud_black.foreground = 1; level.hud_black.sort = -999; level.hud_black setshader( "black", 650, 490 ); level.hud_black.alpha = 0.0; } level.hud_black fadeovertime( var_1 ); level.hud_black.alpha = max( 0.0, min( 1.0, var_0 ) ); if ( var_0 <= 0 ) { wait( var_1 ); level.hud_black destroy(); level.hud_black = undefined; } } lerp_player_to_position_accurate( var_0, var_1 ) { var_2 = spawn( "script_model", level.player getorigin() ); var_2 setmodel( "tag_origin" ); level.player playerlinkto( var_2, "tag_origin" ); var_2 moveto( var_0, var_1 ); wait( var_1 + 0.05 ); var_2 delete(); } move_arc_dist( var_0, var_1, var_2 ) { var_3 = self.origin + anglestoforward( self.angles ) * var_0; move_arc( self.origin, var_3, var_1, var_2 ); } move_arc( var_0, var_1, var_2, var_3, var_4 ) { self endon( "deleted" ); self endon( "destroyed" ); if ( !isdefined( var_4 ) ) var_4 = ( 0, 0, 0 ); var_5 = ceil( min( var_3 * 3, 20 ) ); var_6 = calculate_arc( var_0, var_1, var_2, var_5 ); self.angles = vectortoangles( var_6[1] - self.origin ) + var_4; foreach ( var_9, var_8 in var_6 ) { if ( var_9 < 1 ) continue; self rotateto( vectortoangles( var_8 - self.origin ) + var_4, var_3 / var_5 ); self moveto( var_8, var_3 / var_5 ); wait( var_3 / var_5 ); } } calculate_arc( var_0, var_1, var_2, var_3 ) { var_4 = arc_cached( var_0, var_1 ); if ( isdefined( var_4 ) ) return var_4; var_5 = var_0[0]; var_6 = var_0[1]; var_7 = var_0[2]; var_8 = var_1[0]; var_9 = var_1[1]; var_10 = var_1[2]; var_11 = [ var_0, var_1 ]; var_12 = get_midpoint_arc( var_11, var_2 ); var_13 = var_12[0]; var_14 = var_12[1]; var_15 = var_12[2]; var_16 = []; for ( var_17 = 1; var_17 <= var_3; var_17++ ) { var_18 = var_17 / var_3; var_19 = int( ( 1 - var_18 ) * ( 1 - var_18 ) * var_5 + 2 * ( 1 - var_18 ) * var_18 * var_13 + var_18 * var_18 * var_8 ); var_20 = int( ( 1 - var_18 ) * ( 1 - var_18 ) * var_6 + 2 * ( 1 - var_18 ) * var_18 * var_14 + var_18 * var_18 * var_9 ); var_21 = int( ( 1 - var_18 ) * ( 1 - var_18 ) * var_7 + 2 * ( 1 - var_18 ) * var_18 * var_15 + var_18 * var_18 * var_10 ); var_16[var_17] = ( var_19, var_20, var_21 ); } cache_arc( var_0, var_1, var_16 ); return var_16; } get_midpoint_arc( var_0, var_1 ) { var_2 = 0; var_3 = 0; var_4 = 0; for ( var_5 = 0; var_5 < var_0.size; var_5++ ) { var_2 = var_2 + var_0[var_5][0]; var_3 = var_3 + var_0[var_5][1]; var_4 = var_4 + var_0[var_5][2]; } return ( var_2 / var_0.size, var_3 / var_0.size, var_4 / var_0.size + var_1 ); } arc_cached( var_0, var_1 ) { foreach ( var_3 in level.cached_arcs ) { if ( var_0 == var_3.startorigin && var_1 == var_3.endorigin ) return var_3.array; } return undefined; } cache_arc( var_0, var_1, var_2 ) { var_3 = spawnstruct(); var_3.startorigin = var_0; var_3.endorigin = var_1; var_3.array = var_2; level.cached_arcs = common_scripts\utility::array_add( level.cached_arcs, var_3 ); } cinematic_on() { level.player disableweapons(); level.player allowcrouch( 0 ); level.player allowprone( 0 ); level.player allowjump( 0 ); level.player allowfire( 0 ); } cinematic_off() { level.player enableweapons(); level.player allowcrouch( 1 ); level.player allowprone( 1 ); level.player allowjump( 1 ); level.player allowfire( 1 ); } setup_mantle_hint() { level.strings["mantle"] = &"SCRIPT_MANTLE"; maps\_hud_util::create_mantle(); } show_mantle_hint() { level.player allowjump( 0 ); level.hud_mantle["text"].alpha = 1; level.hud_mantle["icon"].alpha = 1; } hide_mantle_hint() { level.player allowjump( 1 ); level.hud_mantle["text"].alpha = 0; level.hud_mantle["icon"].alpha = 0; } player_check_jump() { self endon( "left_volume" ); self endon( "player_vaulted" ); self endon( "not_looking_at_mantle" ); level endon( "stop_player_vault" ); self notifyonplayercommand( "player_vaulted", "+gostand" ); self waittill( "player_vaulted" ); } player_volume_check( var_0 ) { if ( isdefined( var_0 ) ) self endon( var_0 ); level.player endon( "player_vaulted" ); level endon( "stop_player_vault" ); for (;;) { if ( !level.player istouching( self ) ) { level.player notify( "left_volume" ); if ( isdefined( var_0 ) ) self notify( var_0 ); } wait 0.05; } } player_check_mantle_lookat() { level.player endon( "stop_mantle_lookat" ); level endon( "stop_player_vault" ); for (;;) { var_0 = abs( angleclamp( level.player getplayerangles()[1] ) - self.angles[1] ); level.player.looking_at_mantle = var_0 < 60; if ( !level.player.looking_at_mantle ) level.player notify( "not_looking_at_mantle" ); wait 0.05; } } do_notetracks( var_0, var_1 ) { self endon( "death" ); self endon( "new_anim" ); var_2 = getanimlength( var_0 ); var_3 = getnotetracktimes( var_0, var_1 ); var_4 = 0; for (;;) { var_5 = self getanimtime( var_0 ); if ( var_4 < var_3.size && var_5 >= var_3[var_4] ) { self notify( var_1 ); var_4++; } else if ( var_4 >= var_3.size && var_5 < var_3[0] ) var_4 = 0; wait 0.05; } } hide_and_drop_entity() { maps\_utility::hide_entity(); self.dropped = 1; self.origin = maps\_utility::set_z( self.origin, self.origin[2] - 5000 ); } show_and_raise_entity() { maps\_utility::show_entity(); if ( eval( self.dropped ) ) self.origin = maps\_utility::set_z( self.origin, self.origin[2] + 5000 ); } fast_jog( var_0 ) { if ( var_0 == 1 ) { self.animname = "generic"; maps\_utility::set_run_anim( "clock_jog", 1 ); self.moveplaybackrate = 1; } else { maps\_utility::clear_run_anim(); self.moveplaybackrate = 1; } } setup_blackhawk( var_0 ) { level.player_blackhawk = maps\_vehicle::spawn_vehicle_from_targetname( var_0 ); level.player_blackhawk.dont_crush_player = 1; level.player_blackhawk.path_gobbler = 1; level.player_blackhawk maps\_vehicle::godon(); level.player_blackhawk.lookat_ent = spawn( "script_origin", level.player_blackhawk.origin ); level.player_blackhawk setmaxpitchroll( 0, 10 ); level.player_blackhawk maps\_vehicle_code::kill_lights(); var_1 = level.player_blackhawk common_scripts\utility::spawn_tag_origin(); var_1.origin = level.player_blackhawk gettagorigin( "tag_light_cargo01" ); var_1.angles = level.player_blackhawk gettagangles( "tag_light_cargo01" ); var_1 linkto( level.player_blackhawk ); playfxontag( common_scripts\utility::getfx( "aircraft_light_cockpit_white_300" ), var_1, "tag_origin" ); common_scripts\utility::waitframe(); thread maps\_vehicle::gopath( level.player_blackhawk ); init_player_on_blackhawk( level.player, var_0 + "_seat" ); } init_player_on_blackhawk( var_0, var_1 ) { if ( !isdefined( var_0 ) ) return; var_2 = common_scripts\utility::spawn_tag_origin(); var_2 linkto( level.player_blackhawk, "tag_player", ( 0, -11, -6 ), ( 0, -75, 0 ) ); level.player playerlinktodelta( var_2, "tag_origin", 1.0, 10, 50, 5, 25, 0 ); level.player setplayerangles( ( 0, level.player_blackhawk.angles[1] - 30, 0 ) ); var_0 allowjump( 0 ); var_0 allowsprint( 0 ); var_0 allowprone( 0 ); var_0 allowcrouch( 0 ); var_0 disableweapons(); var_0.is_on_heli = 1; } update_sun() { level.sun_angles_default = getmapsunangles(); level.sun_angles_intro = ( -35, -36, 0 ); level.sun_angles_intro_deck = ( -35, -36, 0 ); level.sun_angles_deck_combat = ( -35, -36, 0 ); level.sun_angles_deck_tilt = ( -19, -116, 0 ); if ( level.start_point == "slow_intro" ) { lerpsunangles( level.sun_angles_default, level.sun_angles_intro, 0.05 ); common_scripts\utility::exploder( 8002 ); if ( maps\_utility::is_gen4() ) var_0 = 2.8; else var_0 = 1.1; setsunlight( 1.0 * var_0, 0.8 * var_0, 0.57 * var_0 ); maps\_utility::setsaveddvar_cg_ng( "r_specularcolorscale", 3.0, 2.0 ); maps\_utility::setsaveddvar_cg_ng( "r_diffusecolorscale", 1.5, 1.5 ); common_scripts\utility::flag_wait( "slow_intro_finished" ); lerpsunangles( level.sun_angles_default, level.sun_angles_deck_combat, 0.05 ); if ( maps\_utility::is_gen4() ) var_0 = 2.8; else var_0 = 1.1; setsunlight( 1.0 * var_0, 0.8 * var_0, 0.57 * var_0 ); maps\_utility::setsaveddvar_cg_ng( "r_specularcolorscale", 3.0, 2.0 ); maps\_utility::setsaveddvar_cg_ng( "r_diffusecolorscale", 1.5, 1.5 ); common_scripts\utility::flag_wait( "defend_sparrow_start" ); lerpsunangles( level.sun_angles_deck_combat, level.sun_angles_deck_tilt, 45, 5, 5 ); maps\_utility::stop_exploder( 8002 ); common_scripts\utility::exploder( 8001 ); } else if ( level.start_point == "medbay" || level.start_point == "deck_combat" || level.start_point == "deck_transition" || level.start_point == "defend_zodiac" || level.start_point == "run_to_sparrow" || level.start_point == "defend_sparrow" ) { lerpsunangles( level.sun_angles_default, level.sun_angles_deck_combat, 0.05 ); common_scripts\utility::exploder( 8002 ); if ( maps\_utility::is_gen4() ) var_0 = 2.8; else var_0 = 1.1; setsunlight( 1.0 * var_0, 0.8 * var_0, 0.57 * var_0 ); maps\_utility::setsaveddvar_cg_ng( "r_specularcolorscale", 3.0, 2.0 ); maps\_utility::setsaveddvar_cg_ng( "r_diffusecolorscale", 1.5, 1.5 ); common_scripts\utility::flag_wait( "defend_sparrow_start" ); lerpsunangles( level.sun_angles_deck_combat, level.sun_angles_deck_tilt, 45, 5, 5 ); maps\_utility::stop_exploder( 8002 ); common_scripts\utility::exploder( 8001 ); } else { if ( maps\_utility::is_gen4() ) var_0 = 2.8; else var_0 = 1.1; setsunlight( 1.0 * var_0, 0.8 * var_0, 0.57 * var_0 ); maps\_utility::setsaveddvar_cg_ng( "r_specularcolorscale", 2.0, 1.5 ); maps\_utility::setsaveddvar_cg_ng( "r_diffusecolorscale", 1.5, 1.5 ); lerpsunangles( level.sun_angles_deck_combat, level.sun_angles_deck_tilt, 0.05 ); maps\_utility::stop_exploder( 8002 ); common_scripts\utility::exploder( 8001 ); } } update_deck_post_intro() { level.sliding_jet2 hide(); level.sliding_jet3 hide(); common_scripts\utility::flag_wait( "slow_intro_finished" ); level.sliding_jet2 show(); level.sliding_jet3 show(); } generic_prop_raven_anim( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 ) { var_8 = undefined; var_9 = undefined; var_10 = undefined; var_11 = undefined; var_12 = undefined; var_13 = undefined; var_14 = undefined; var_15 = undefined; if ( !isdefined( var_5 ) ) var_5 = 1; var_16 = maps\_utility::spawn_anim_model( var_1 ); if ( isdefined( var_3 ) ) { var_8 = getentarray( var_3, "targetname" ); foreach ( var_18 in var_8 ) { if ( var_18.script_noteworthy == "item" ) { var_9 = var_18; continue; } if ( var_18.script_noteworthy == "clip" ) { var_10 = var_18; continue; } var_11 = var_18; } if ( isdefined( var_10 ) ) var_10 linkto( var_9 ); if ( isdefined( var_11 ) ) var_11 linkto( var_9 ); } if ( isdefined( var_4 ) ) { var_12 = getentarray( var_4, "targetname" ); foreach ( var_18 in var_12 ) { if ( var_18.script_noteworthy == "item" ) { var_13 = var_18; continue; } if ( var_18.script_noteworthy == "clip" ) { var_14 = var_18; continue; } var_15 = var_18; } if ( isdefined( var_14 ) ) var_14 linkto( var_13 ); if ( isdefined( var_15 ) ) var_15 linkto( var_13 ); } var_0 maps\_anim::anim_first_frame_solo( var_16, var_2 ); var_22 = var_16 gettagorigin( "J_prop_1" ); var_23 = var_16 gettagangles( "J_prop_1" ); var_24 = var_16 gettagorigin( "J_prop_2" ); var_25 = var_16 gettagangles( "J_prop_2" ); common_scripts\utility::waitframe(); if ( isdefined( var_3 ) && var_9.classname == "script_model" ) { var_9.origin = var_22; if ( var_5 == 1 ) var_9.angles = var_23; } if ( isdefined( var_4 ) && var_13.classname == "script_model" ) { var_13.origin = var_24; if ( var_5 == 1 ) var_13.angles = var_25; } common_scripts\utility::waitframe(); if ( isdefined( var_3 ) ) var_9 linkto( var_16, "J_prop_1" ); if ( isdefined( var_4 ) ) var_13 linkto( var_16, "J_prop_2" ); common_scripts\utility::flag_wait( var_6 ); if ( isdefined( self.script_delay ) ) wait( self.script_delay ); var_0 maps\_anim::anim_single_solo( var_16, var_2 ); if ( isdefined( var_7 ) && var_7 == 1 ) { if ( isdefined( var_3 ) ) var_9 delete(); if ( isdefined( var_4 ) ) var_13 delete(); var_16 delete(); } else { if ( isdefined( var_3 ) ) var_9 unlink(); if ( isdefined( var_4 ) ) var_13 unlink(); var_16 delete(); } } player_animate( var_0 ) { level.player setstance( "stand" ); level.player allowcrouch( 0 ); level.player allowprone( 0 ); level.player disableweapons(); level.player freezecontrols( 1 ); var_1 = maps\_utility::spawn_anim_model( "player_rig", level.player.origin ); var_1.angles = ( 0, 90, 0 ); level.player playerlinktoblend( var_1, "tag_player", 0.3 ); maps\_anim::anim_single_solo( var_1, var_0 ); var_1 delete(); } spawn_animate_delete( var_0, var_1 ) { var_2 = getent( var_0, "targetname" ); var_3 = var_2 maps\_utility::spawn_ai( 1, 0 ); var_3.animname = "generic"; maps\_anim::anim_single_solo( var_3, var_1 ); var_3 delete(); } eval( var_0 ) { return isdefined( var_0 ) && var_0; } safe_deleteent( var_0 ) { if ( isdefined( var_0 ) ) maps\_utility::deleteent( var_0 ); } #using_animtree("vehicles"); init_gunboats() { level.vttype = "gunboat"; level.vtmodel = "vehicle_gun_boat_iw6"; level.vtclassname = "script_vehicle_gunboat"; maps\_vehicle::build_drive( %carrier_rappel_defend_gun_boat_moving, %carrier_rappel_defend_gun_boat_moving, 17 ); } spawn_gunboat( var_0, var_1 ) { foreach ( var_3 in level.gunboats ) { if ( isalive( var_3 ) && isdefined( var_3.saved_targetname ) && var_3.saved_targetname == var_0 ) return; } level.gunboats = maps\_utility::array_removedead( level.gunboats ); if ( level.gunboats.size >= 4 ) return; maps\_utility::array_spawn_function_targetname( var_0, ::setup_target_on_vehicle ); var_3 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( var_0 ); var_3.saved_targetname = var_0; var_3.health = 25000; var_3.currenthealth = var_3.health; var_3 thread gunboat_treadfx(); level.gunboats = common_scripts\utility::array_add( level.gunboats, var_3 ); var_3.mgturret[0] setaispread( level.difficultysettings["gunboat_aiSpread"][maps\_gameskill::get_skill_from_index( level.gameskill )] ); var_3.mgturret[0] setconvergencetime( level.difficultysettings["gunboat_convergenceTime"][maps\_gameskill::get_skill_from_index( level.gameskill )] ); if ( eval( var_1 ) && maps\_gameskill::get_skill_from_index( level.gameskill ) != "easy" ) var_3.mgturret[0] settargetentity( level.player ); var_3 thread gunboat_think(); } gunboat_treadfx() { stopfxontag( common_scripts\utility::getfx( "gunboat_wake" ), self, "j_bodymid" ); var_0 = common_scripts\utility::spawn_tag_origin(); var_0 linkto( self, "tag_origin", anglestoforward( ( 0, self.angles[1], 0 ) ) * ( 450, 0, 0 ) + ( 0, 0, 15 ), ( 0, 0, 0 ) ); playfxontag( common_scripts\utility::getfx( "gunboat_wake" ), var_0, "tag_origin" ); self waittill( "death" ); stopfxontag( common_scripts\utility::getfx( "gunboat_wake" ), var_0, "tag_origin" ); var_0 delete(); } gunboat_think() { self endon( "death" ); thread gunboat_dumbfire(); maps\_utility::ent_flag_init( "end" ); maps\_utility::ent_flag_wait( "end" ); self kill(); } gunboat_dumbfire() { self endon( "death" ); common_scripts\utility::flag_wait( "osprey_intermission" ); self.mgturret[0] setaispread( level.difficultysettings["gunboat_aiSpread"]["easy"] ); self.mgturret[0] setconvergencetime( level.difficultysettings["gunboat_convergenceTime"]["easy"] ); wait 4; self.mgturret[0] setaispread( level.difficultysettings["gunboat_aiSpread"][maps\_gameskill::get_skill_from_index( level.gameskill )] ); self.mgturret[0] setconvergencetime( level.difficultysettings["gunboat_convergenceTime"][maps\_gameskill::get_skill_from_index( level.gameskill )] ); common_scripts\utility::flag_wait( "gunship_attack" ); self.mgturret[0] setaispread( 100 ); self.mgturret[0] setconvergencetime( 100 ); } explode_gunboats( var_0, var_1, var_2 ) { wait 0.2; foreach ( var_4 in level.gunboats ) { if ( isdefined( var_4 ) ) { var_5 = distance( var_4.origin, var_0 ); if ( var_5 <= var_1 ) { level.osprey_hit_gunboats++; level.osprey_total_hits++; var_4 kill(); wait 0.1; } } } } kill_remaining_gunboats() { foreach ( var_1 in level.gunboats ) { if ( isdefined( var_1 ) ) { var_1 kill(); wait 0.1; } } } vehicles_loop_until_endon( var_0, var_1, var_2, var_3, var_4 ) { level endon( var_1 ); for (;;) { var_5 = maps\_vehicle::spawn_vehicles_from_targetname_and_drive( var_0 ); if ( eval( var_4 ) ) level.vista_vehicles = common_scripts\utility::array_combine( level.vista_vehicles, var_5 ); foreach ( var_7 in var_5 ) { if ( isdefined( var_7 ) && isalive( var_7 ) ) var_7 common_scripts\utility::waittill_any( "reached_dynamic_path_end", "death" ); } if ( eval( var_4 ) ) level.vista_vehicles = common_scripts\utility::array_remove_array( level.vista_vehicles, var_5 ); if ( !isdefined( var_2 ) ) var_2 = 3; if ( !isdefined( var_3 ) ) var_3 = 7; wait( randomfloatrange( var_2, var_3 ) ); } } vehicles_loop_and_unload_until_endon( var_0, var_1, var_2, var_3, var_4, var_5 ) { level endon( var_1 ); maps\_utility::array_spawn_function_targetname( var_0, ::vehicle_unload_drones, var_2, var_3 ); for (;;) { var_6 = maps\_vehicle::spawn_vehicles_from_targetname_and_drive( var_0 ); foreach ( var_8 in var_6 ) { if ( isdefined( var_8 ) && isalive( var_8 ) ) var_8 common_scripts\utility::waittill_any( "reached_dynamic_path_end", "death" ); } if ( !isdefined( var_4 ) ) var_4 = 3; if ( !isdefined( var_5 ) ) var_5 = 7; wait( randomfloatrange( var_4, var_5 ) ); } } vehicle_unload_drones( var_0, var_1 ) { self endon( "death" ); self waittill( "unloading" ); var_2 = 1; var_3 = getentarray( self.script_parameters, "script_noteworthy" ); foreach ( var_5 in var_3 ) { if ( isdefined( var_5 ) && var_5.classname == "script_model" ) { var_5 thread drone_unload( var_0, var_2 ); var_2++; if ( var_2 > var_1 ) var_2 = 1; } } } setup_target_on_vehicle() { self endon( "death" ); thread clear_target_on_vehicle_death(); for (;;) { if ( !eval( level.player.in_osprey ) ) level.player waittill( "using_depth_charge" ); if ( target_getarray().size >= 63 ) return; if ( !isdefined( level.target_count ) ) level.target_count = 0; while ( level.target_count > 5 ) { wait 0.05; if ( !isdefined( level.target_time ) || level.target_time != gettime() ) { level.target_count = 0; level.target_time = gettime(); } } if ( target_getarray().size >= 63 ) return; var_0 = "ac130_hud_enemy_ai_target_s_w"; var_1 = ( 0, 0, 32 ); var_2 = 0; var_3 = 1; var_4 = 0; var_5 = 60; var_6 = ( 1, 0, 0 ); if ( ( isai( self ) || is_drone() ) && isdefined( self.team ) && self.team == "allies" ) { var_0 = "ac130_hud_friendly_ai_diamond_s_w"; var_6 = ( 0.3, 1, 0.3 ); var_2 = 1; } else if ( maps\_vehicle::isvehicle() && maps\_vehicle::ishelicopter() ) { var_0 = "ac130_hud_enemy_vehicle_target_s_w"; var_6 = ( 1, 0, 0 ); var_4 = 1; var_5 = 150; } else if ( issubstr( self.classname, "vehicle" ) && isdefined( self.script_team ) && self.script_team != "allies" || eval( self.fake ) && issubstr( self.model, "zodiac" ) ) { var_0 = "ac130_hud_enemy_vehicle_target_s_w"; var_6 = ( 1, 0, 0 ); var_4 = 1; var_5 = 150; } else if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "big" ) { var_0 = "ac130_hud_enemy_vehicle_target_s_w"; var_6 = ( 1, 0, 0 ); var_5 = 200; } target_alloc( self, var_1 ); target_setshader( self, var_0 ); target_setscaledrendermode( self, 1 ); if ( var_2 ) target_drawsingle( self ); if ( var_3 ) target_drawsquare( self, var_5 ); if ( var_4 ) target_drawcornersonly( self, 1 ); target_setcolor( self, var_6 ); target_showtoplayer( self, level.player ); target_flush( self ); level.target_count++; level.player waittill( "depth_charge_exit" ); } } clear_target_on_vehicle_death() { level.player endon( "depth_charge_exit" ); self waittill( "death" ); if ( isdefined( self ) && target_istarget( self ) ) target_remove( self ); } fake_vehicles_loop_until_endon( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 ) { level endon( var_3 ); var_8 = 17.6; if ( var_0 == 0 ) { } var_9 = common_scripts\utility::getstructarray( var_1, "targetname" ); var_10 = []; foreach ( var_12 in var_9 ) { var_13 = spawn( "script_model", var_12.origin ); var_13 setmodel( var_2 ); var_13.angles = var_12.angles; var_13.target = var_12.target; var_14 = common_scripts\utility::getstruct( var_13.target, "targetname" ); if ( isdefined( var_14 ) && isdefined( var_14.target ) ) var_13.target2 = var_14.target; var_13 hide(); var_10 = common_scripts\utility::array_add( var_10, var_13 ); } if ( eval( var_6 ) ) level.vista_vehicles = common_scripts\utility::array_combine( level.vista_vehicles, var_10 ); for (;;) { foreach ( var_13 in var_10 ) { if ( !isdefined( var_13.start_origin ) ) var_13.start_origin = var_13.origin; var_13.origin = var_13.start_origin; } if ( !eval( var_7 ) ) fake_vehicles_waittill_not_looking( var_10 ); var_18 = 0; var_19 = 0; foreach ( var_13 in var_10 ) { var_13 show(); var_21 = common_scripts\utility::getstruct( var_13.target, "targetname" ); var_13.angles = vectortoangles( var_21.origin - var_13.origin ); var_22 = distance( var_13.origin, var_21.origin ); var_23 = var_22 / ( var_0 * var_8 ); var_24 = var_23; var_13 moveto( var_21.origin, var_23 ); if ( isdefined( var_13.target2 ) ) { var_25 = common_scripts\utility::getstruct( var_13.target2, "targetname" ); var_26 = distance( var_21.origin, var_25.origin ); var_19 = var_26 / ( var_0 * var_8 ) / 2; var_13 maps\_utility::delaythread( var_23, ::goto_dest2, var_25, var_19 ); var_24 = var_24 + var_19; } var_18 = max( var_18, var_23 ); } wait( var_18 ); fake_vehicles_waittill_not_looking( var_10 ); common_scripts\utility::array_call( var_10, ::hide ); foreach ( var_13 in var_10 ) var_13 notify( "stop_goto_dest2" ); if ( eval( var_7 ) ) { common_scripts\utility::array_call( var_10, ::delete ); return; } if ( !isdefined( var_4 ) ) var_4 = 3; if ( !isdefined( var_5 ) ) var_5 = 7; wait( randomfloatrange( var_4, var_5 ) ); } } goto_dest2( var_0, var_1 ) { self endon( "death" ); self endon( "stop_goto_dest2" ); self moveto( var_0.origin, var_1, 0, var_1 / 2 ); wait( var_1 ); self hide(); } fake_vehicles_waittill_not_looking( var_0 ) { var_1 = 1; while ( var_1 ) { wait 0.5; var_1 = 0; foreach ( var_3 in var_0 ) { if ( maps\_utility::either_player_looking_at( var_3.origin, cos( 65 ), 1 ) ) { var_1 = 1; break; } } } } drone_unload( var_0, var_1 ) { self waittill( "jumpedout" ); self.target = var_0 + var_1; maps\_drone::drone_init(); thread randomly_kill_drone(); self waittill( "death" ); maps\_drone::drone_drop_real_weapon_on_death(); } randomly_kill_drone() { self endon( "death" ); wait( randomfloatrange( 8, 16 ) ); self dodamage( self.health, self.origin ); } drone_respawner( var_0, var_1, var_2, var_3, var_4 ) { if ( !isdefined( var_1 ) ) var_1 = 8; if ( !isdefined( var_2 ) ) var_2 = 20; if ( !isdefined( var_3 ) ) var_3 = 8; if ( !isdefined( var_4 ) ) var_4 = 20; waittill_player_not_looking( 1 ); var_5 = maps\_utility::spawn_ai( 1 ); var_5.ignoreme = 1; var_5.noragdoll = undefined; var_5 thread kill_drone_respawner( var_0 ); level endon( var_0 ); for (;;) { wait( randomfloatrange( var_1, var_2 ) ); if ( isdefined( var_5 ) ) { var_5 dodamage( var_5.health, var_5.origin ); level.dead_ally_drones = common_scripts\utility::array_add( level.dead_ally_drones, var_5 ); } wait( randomfloatrange( var_3, var_4 ) ); while ( eval( self.inhibit_respawn ) ) common_scripts\utility::waitframe(); waittill_player_not_looking( 1 ); var_5 = maps\_utility::spawn_ai( 0 ); var_5 thread kill_drone_respawner( var_0 ); } } kill_drone_respawner( var_0 ) { self endon( "death" ); common_scripts\utility::flag_wait( var_0 ); if ( isdefined( self ) ) self dodamage( self.health, self.origin ); } waittill_player_not_looking( var_0 ) { self endon( "death" ); if ( eval( var_0 ) ) { var_1 = cos( 65 ); while ( maps\_utility::either_player_looking_at( self.origin, var_1, 1 ) ) wait 1; } else { while ( maps\_utility::either_player_looking_at( self.origin ) ) wait 1; } } inhibit_respawn( var_0 ) { self.inhibit_respawn = var_0; } heli_fast_explode( var_0 ) { wait 0.1; if ( maps\_vehicle::isvehicle() && maps\_vehicle::ishelicopter() && ( isdefined( self.script_parameters ) && self.script_parameters == "fast_explode" || isdefined( var_0 ) && randomint( 100 ) <= var_0 ) ) { self waittill( "death" ); if ( isdefined( self ) ) { playfx( common_scripts\utility::getfx( "vfx_x_mphnd_primary" ), self.origin, anglestoforward( self.angles ) ); self delete(); } } } drone_delete_on_unload() { if ( isdefined( self.riders ) ) { foreach ( var_1 in self.riders ) var_1.drone_delete_on_unload = 1; } } is_drone() { return self.classname == "script_model"; } safe_delete_drone( var_0 ) { self endon( "death" ); if ( !isdefined( var_0 ) ) var_0 = 500; thread maps\_utility::ai_delete_when_out_of_sight( [ self ], var_0 ); } run_destructibles() { thread carrier_liferaft(); } carrier_liferaft() { var_0 = getentarray( "liferaft_trigger", "targetname" ); foreach ( var_2 in var_0 ) var_2 thread carrier_liferaft_think(); } carrier_liferaft_think() { level endon( "deck_tilt_start" ); var_0 = 0; var_1 = randomintrange( 2000, 5000 ); for (;;) { self waittill( "damage", var_2 ); var_0 = var_0 + var_2; if ( var_0 >= var_1 ) { var_3 = getentarray( self.target, "targetname" ); var_3 = common_scripts\utility::array_reverse( var_3 ); var_4 = var_3[0]; if ( isdefined( var_4.target ) ) { var_5 = getent( var_4.target, "targetname" ); var_5 delete(); } var_4 physicslaunchserver( var_4.origin, ( randomfloatrange( 0, 500 ), 0, 0 ) ); var_4 thread liferaft_splash_on_hit_water(); wait( randomfloatrange( 0.2, 0.3 ) ); var_4 = var_3[1]; if ( isdefined( var_4.target ) ) { var_5 = getent( var_4.target, "targetname" ); var_5 delete(); } var_4 physicslaunchserver( var_4.origin, ( randomfloatrange( 2500, 4000 ), 0, 0 ) ); var_4 thread liferaft_splash_on_hit_water(); return; } } } liferaft_splash_on_hit_water() { while ( isdefined( self ) && self.origin[2] > level.water_level ) wait 0.05; if ( isdefined( self ) ) { var_0 = ( self.origin[0], self.origin[1], level.water_level ); playfx( common_scripts\utility::getfx( "body_splash" ), var_0 ); } wait 0.1; self delete(); } setup_edge_lean() { var_0 = getentarray( "edge_lean", "targetname" ); foreach ( var_2 in var_0 ) var_2 thread edge_lean_natural(); } edge_lean_natural() { level.player endon( "death" ); self.player_in = 0; level.player.in_lean_vol = 0; thread bump_player(); if ( level.gameskill < 2 ) level.player thread edge_lean_shield(); for (;;) { self waittill( "trigger" ); level.player.in_lean_vol = 1; level.player_view_pitch_down = getdvar( "player_view_pitch_down" ); setsaveddvar( "player_view_pitch_down", 89 ); while ( level.player istouching( self ) ) { self.player_in = 1; common_scripts\utility::waitframe(); } self.player_in = 0; level.player.in_lean_vol = 0; setsaveddvar( "player_view_pitch_down", level.player_view_pitch_down ); } } bump_player() { var_0 = 7; var_1 = 90; var_2 = 10; var_3 = -10; var_4 = var_1 - var_2; var_5 = common_scripts\utility::getstruct( self.target, "targetname" ); var_6 = undefined; if ( isdefined( var_5.target ) ) var_6 = getent( var_5.target, "targetname" ); else return; var_7 = var_6.origin; var_8 = -1 * anglestoforward( var_5.angles ); var_9 = vectornormalize( ( var_8[0], var_8[1], 0 ) ); var_10 = -1 * var_9; var_11 = vectortoangles( var_10 ); var_12 = 0; for (;;) { if ( !self.player_in ) { common_scripts\utility::waitframe(); continue; } var_13 = level.player getplayerangles(); var_14 = anglestoforward( var_13 ); var_14 = vectornormalize( ( var_14[0], var_14[1], 0 ) ); var_15 = vectordot( var_14, var_10 ); var_16 = acos( var_15 ); var_16 = round_num( var_16, 2 ); if ( var_16 < var_4 ) { if ( var_6.origin != var_7 ) { var_6 moveto( var_7, 0.1 ); wait 0.1; } else common_scripts\utility::waitframe(); continue; } var_17 = min( ( var_16 - var_4 ) / ( var_2 - var_3 ), 1 ); var_18 = var_7 + var_9 * var_0 * var_17; if ( var_17 != var_12 ) var_6 moveto( var_18, 0.1 ); wait 0.1; if ( !self.player_in && var_6.origin != var_7 ) { var_6 moveto( var_7, 0.1 ); wait 0.1; } var_12 = var_17; } } round_num( var_0, var_1 ) { var_2 = 10 * var_1; if ( var_1 == 0 ) var_2 = 1; var_3 = int( var_0 * var_2 ); var_4 = var_3 / var_2; return var_4; } edge_lean_shield() { self endon( "death" ); var_0 = 60; for (;;) { var_1 = level.player getplayerangles(); var_2 = angleclamp180( var_1[0] ); if ( self.in_lean_vol && var_2 >= var_0 ) level.player enabledeathshield( 1 ); else level.player enabledeathshield( 0 ); wait 0.5; } } player_rain_drops() { level.rain_overlay = []; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large"; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large_02"; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small"; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small_02"; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large"; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large_02"; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small"; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small_02"; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large"; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large_02"; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small"; level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small_02"; } rain_overlay_alpha( var_0, var_1 ) { var_2 = self; if ( !isplayer( var_2 ) ) var_2 = level.player; if ( !isdefined( var_1 ) ) var_1 = 1; var_3 = get_rain_overlay( var_2 ); var_3[0].x = 0; var_3[0].y = 0; var_3[0] setshader( "overlay_rain", 640, 480 ); var_3[0].sort = 50; var_3[0].lowresbackground = 0; var_3[0].alignx = "left"; var_3[0].aligny = "top"; var_3[0].alpha = 0.85; var_3[0].horzalign = "fullscreen"; var_3[0].vertalign = "fullscreen"; var_3[0] fadeovertime( var_0 ); var_3[0].alpha = var_1; for ( var_4 = 1; var_4 < var_3.size; var_4++ ) { var_5 = common_scripts\utility::random( level.rain_overlay ); var_3[var_4].x = 0 + randomint( 360 ); var_3[var_4].y = 0 + randomint( 360 ); var_3[var_4] setshader( var_5, 256, 256 ); var_3[var_4].sort = 50; var_3[var_4].lowresbackground = 0; var_3[var_4].alignx = "left"; var_3[var_4].aligny = "top"; var_3[var_4].horzalign = "fullscreen"; var_3[var_4].vertalign = "fullscreen"; var_3[var_4].alpha = randomfloatrange( 0.15, 0.3 ); var_3[var_4] fadeovertime( var_0 ); var_3[var_4].alpha = var_1; wait 0.8; } } get_rain_overlay( var_0 ) { if ( !isdefined( var_0.overlay_frozen ) ) { var_0.overlay_frozen = []; var_0.overlay_frozen[0] = newclienthudelem( var_0 ); var_0.overlay_frozen[1] = newclienthudelem( var_0 ); var_0.overlay_frozen[2] = newclienthudelem( var_0 ); var_0.overlay_frozen[3] = newclienthudelem( var_0 ); var_0.overlay_frozen[4] = newclienthudelem( var_0 ); } return var_0.overlay_frozen; } phalanx_gun_fire( var_0 ) { var_1 = getent( var_0, "targetname" ); if ( !isdefined( var_1 ) ) return; var_1 endon( "stop_firing" ); if ( !isdefined( var_1.turret ) ) { var_1.turret = spawnturret( "misc_turret", var_1.origin, "phalanx_turret" ); var_1.turret.angles = var_1.angles; var_1.turret maketurretinoperable(); var_1.turret setcandamage( 0 ); var_1.turret setmodel( "crr_weapon_phalanx_01" ); var_1.turret setturretteam( "allies" ); var_1.turret setdefaultdroppitch( -20 ); var_1.turret setmode( "manual" ); var_1.turret.weaponinfo = "phalanx_turret"; var_1.turret.weaponname = "phalanx_turret"; var_1.turret_target = common_scripts\utility::spawn_tag_origin(); var_1.turret settargetentity( var_1.turret_target ); var_1 hide(); var_1.turret_target.on_target = 0; var_1 thread phalanx_gun_fire_at_missiles(); } var_2 = 0; for (;;) { var_3 = randomfloatrange( 15, 45 ); var_4 = randomfloatrange( -60, 60 ); var_5 = randomfloatrange( 2.0, 3.0 ); var_6 = var_5 * randomfloatrange( 0.333, 0.666 ); var_1.turret_target moveto( var_1.origin + anglestoforward( ( var_1.angles[0] - var_3, var_1.angles[1] + var_4, 0 ) ) * 2000, var_6 ); while ( var_5 > 0 && !var_1.turret_target.on_target && ( !isdefined( level.player.using_depth_charge ) || !level.player.using_depth_charge ) ) { if ( !var_2 && var_6 < randomfloat( 0.5 ) ) var_1 phalanx_shoot(); else var_1 phalanx_stop_shoot(); wait 0.05; var_5 = var_5 - 0.05; var_6 = var_6 - 0.05; } var_2 = 0; var_1 phalanx_stop_shoot(); wait( randomfloat( 1.0 ) ); if ( isdefined( level.player.using_depth_charge ) && level.player.using_depth_charge ) level.player waittill( "depth_charge_exit" ); if ( var_1.turret_target.on_target ) { var_1 waittill( "off_target" ); var_2 = 1; } } } phalanx_gun_fire_target( var_0, var_1, var_2, var_3, var_4, var_5 ) { var_6 = getent( var_0, "targetname" ); var_6 endon( "stop_firing" ); if ( !isdefined( var_6 ) || !isdefined( var_6.turret_target ) || var_6.turret_target.on_target ) return; if ( !isdefined( var_4 ) ) var_4 = ( 0, 0, 0 ); if ( !isdefined( var_5 ) ) var_5 = "tag_origin"; if ( !isdefined( var_1.ent_flag ) || !isdefined( var_1.ent_flag[var_2] ) ) { var_1 maps\_utility::ent_flag_init( var_2 ); var_1 maps\_utility::ent_flag_init( var_3 ); } var_1 maps\_utility::ent_flag_wait( var_2 ); var_6.turret_target.on_target = 1; for ( var_7 = vectornormalize( var_1 gettagorigin( var_5 ) + var_1 vehicle_getvelocity() * 0.25 - var_6.turret_target.origin ); vectordot( var_7, anglestoforward( var_1.angles ) ) < 0 && ( !isdefined( level.player.using_depth_charge ) || !level.player.using_depth_charge ); var_7 = vectornormalize( var_1 gettagorigin( var_5 ) + var_1 vehicle_getvelocity() * 0.25 - var_6.turret_target.origin ) ) { var_6.turret_target moveto( var_6.turret_target.origin + var_7 * 8000, 1 ); if ( vectordot( anglestoforward( var_6.turret gettagangles( "tag_flash" ) ), vectornormalize( var_1.origin - var_6.origin ) ) > 0.9 ) var_6 phalanx_shoot(); wait 0.05; } var_8 = randomfloat( 0.25 ); var_9 = -0.05; while ( isdefined( var_1 ) && !var_1 maps\_utility::ent_flag( var_3 ) && abs( angleclamp180( var_6.turret gettagangles( "tag_flash" )[1] - var_6.angles[1] ) ) < 70 && ( !isdefined( level.player.using_depth_charge ) || !level.player.using_depth_charge ) ) { var_6.turret_target moveto( var_1 gettagorigin( var_5 ) + ( randomfloatrange( -800, 800 ), randomfloatrange( -800, 800 ), randomfloatrange( -800, 800 ) ) + var_1 vehicle_getvelocity() * ( var_8 + 0.5 ), 0.5 ); var_6 phalanx_shoot(); var_8 = var_8 + var_9; if ( randomfloat( 1 ) > 0.9 || var_8 <= 0.25 && var_9 < 0 || var_8 >= 0.25 && var_9 > 0 ) var_9 = var_9 * -1; wait 0.05; } var_6 phalanx_stop_shoot(); var_6.turret_target.on_target = 0; var_6 notify( "off_target" ); } phalanx_gun_fire_at_missiles() { self endon( "stop_firing" ); for (;;) { while ( self.turret_target.on_target || !isdefined( level.land_missiles ) ) wait 0.05; var_0 = undefined; var_1 = -1; foreach ( var_3 in level.land_missiles ) { if ( angleclamp180( var_3.angles[0] ) < randomfloatrange( 45, 60 ) && abs( angleclamp180( vectortoangles( var_3.origin - self.origin )[1] - self.angles[1] ) ) < 45 ) { var_4 = vectordot( anglestoforward( self.turret gettagangles( "tag_flash" ) ), vectornormalize( var_3.origin - self.origin ) ); if ( var_4 > var_1 ) { var_1 = var_4; var_0 = var_3; } } } if ( !isdefined( var_0 ) ) { wait 0.05; continue; } level.land_missiles = common_scripts\utility::array_remove( level.land_missiles, var_0 ); var_6 = var_0.origin; wait 0.05; var_7 = distance( var_6, var_0.origin ) / 0.05; self.turret_target.on_target = 1; var_8 = var_0.origin - anglestoforward( var_0.angles ) * var_7 * 0.5; var_9 = vectornormalize( var_8 - self.turret_target.origin ); for ( var_10 = var_9; isdefined( var_0 ) && distancesquared( var_8, self.turret_target.origin ) > 160000 && vectordot( var_9, var_10 ) >= 0.0; var_9 = vectornormalize( var_8 - self.turret_target.origin ) ) { self.turret_target moveto( self.turret_target.origin + var_9 * 10000, 0.5 ); if ( vectordot( anglestoforward( self.turret gettagangles( "tag_flash" ) ), vectornormalize( var_0.origin - self.origin ) ) > 0.996 ) phalanx_shoot(); wait 0.05; if ( isdefined( var_0 ) ) var_8 = var_0.origin - anglestoforward( var_0.angles ) * var_7 * 0.5; var_10 = var_9; } var_11 = 0; var_12 = 0; while ( isdefined( var_0 ) && var_11 < 2 && abs( angleclamp180( self.turret gettagangles( "tag_flash" )[1] - self.angles[1] ) ) < 70 ) { self.turret_target moveto( var_0.origin - anglestoforward( var_0.angles ) * var_7 * 0.5 - ( 0, 0, randomfloatrange( -50, 100 ) ), 0.25 ); phalanx_shoot(); var_11 = var_11 + 0.05; var_12 = var_12 + 0.05; if ( var_11 > 1 && var_12 >= 0.2 ) { playfx( common_scripts\utility::getfx( "vfx_phalanx_missile_impact" ), var_0.origin ); var_12 = 0; } if ( var_11 >= 2 ) var_0 notify( "destroyed" ); wait 0.05; } if ( var_11 >= 2 ) { for ( var_13 = 0; var_13 < randomintrange( 5, 10 ); var_13++ ) { phalanx_shoot(); wait 0.05; } } phalanx_stop_shoot(); self.turret_target.on_target = 0; self notify( "off_target" ); } } phalanx_gun_fire_stop( var_0 ) { var_1 = getent( var_0, "targetname" ); if ( !isdefined( var_1 ) ) return; var_1 notify( "stop_firing" ); var_1 phalanx_stop_shoot(); if ( isdefined( var_1.turret_target ) ) var_1.turret_target.origin = var_1.origin + anglestoforward( var_1.angles ) * 2000; } phalanx_gun_offline( var_0 ) { var_1 = getent( var_0, "targetname" ); if ( !isdefined( var_1 ) ) return; var_1 notify( "stop_firing" ); if ( isdefined( var_1.turret ) ) { var_1.turret stopfiring(); var_1.turret turretsetbarrelspinenabled( 0 ); var_1.turret_target.origin = var_1.origin + anglestoforward( var_1.angles + ( 20, 0, 0 ) ) * 2000; var_1 stoploopsound( "amb_carr_phalanx_loop" ); } } phalanx_shoot() { self.turret shootturret(); if ( isdefined( self.turret ) && !self.turret isfiringturret() ) { self.turret startfiring(); self playloopsound( "amb_carr_phalanx_loop" ); } } phalanx_stop_shoot() { if ( isdefined( self.turret ) && self.turret isfiringturret() ) { self.turret stopfiring(); self playsound( "amb_carr_phalanx_stop" ); self stoploopsound( "amb_carr_phalanx_loop" ); } } modulus( var_0, var_1 ) { var_2 = int( var_0 / var_1 ); return var_0 - var_2 * var_1; } ac130_magic_bullet( var_0, var_1 ) { level endon( "defend_sparrow_finished" ); var_2 = get_gun_tag(); if ( !isdefined( var_1 ) ) { var_3 = self gettagangles( "tag_flash_" + var_0 + "_" + var_2 ); var_3 = var_3 + ( 32, 0, 0 ); var_1 = self gettagorigin( "tag_flash_" + var_0 + "_" + var_2 ) + anglestoforward( var_3 ) * 10000; } var_4 = self gettagorigin( "tag_flash_" + var_0 + "_" + var_2 ); var_5 = magicbullet( "ac130_" + var_0 + "_carrier", var_4, var_1 ); var_6 = "tag_flash_" + var_0 + "_" + var_2; playfxontag( common_scripts\utility::getfx( "ac130_40mm_muzzle" ), self, var_6 ); var_5 thread ac130_magic_bullet_splash( var_0 ); } ac130_magic_bullet_fake( var_0, var_1, var_2 ) { var_3 = magicbullet( "ac130_" + var_0 + "_carrier", var_1, var_2 ); var_3 thread ac130_magic_bullet_splash( var_0 ); } ac130_magic_bullet_splash( var_0 ) { while ( isdefined( self ) ) { if ( self.origin[2] < level.water_level + 100 ) break; wait 0.05; } if ( isdefined( self ) ) playfx( common_scripts\utility::getfx( "ac130_" + var_0 + "_impact_water" ), ( self.origin[0], self.origin[1], level.water_level ) ); } ac130_magic_105( var_0 ) { level endon( "defend_sparrow_finished" ); var_1 = get_gun_tag(); var_2 = magicbullet( "ac130_105mm_carrier", self gettagorigin( "tag_flash_105mm_" + var_1 ), var_0 ); playfxontag( common_scripts\utility::getfx( "ac130_105mm_muzzle" ), self, "tag_flash_105mm_" + var_1 ); var_2 ac130_magic_105_impact( var_0 ); } ac130_magic_105_fake( var_0, var_1 ) { var_2 = magicbullet( "ac130_105mm_carrier", var_0, var_1 ); var_2 ac130_magic_105_impact( var_1 ); } ac130_magic_105_impact( var_0 ) { var_1 = 0; while ( isdefined( self ) ) { if ( distancesquared( self.origin, var_0 ) < squared( 50 ) ) break; wait 0.05; } if ( isdefined( self ) ) { playfx( common_scripts\utility::getfx( "ac130_105mm_impact" ), var_0 ); thread maps\carrier_audio::aud_carr_sparrow_105_hit( var_0 ); } } get_gun_tag() { if ( is_player_right() ) return "ri"; return "le"; } is_player_right() { var_0 = 0.707; var_1 = vectornormalize( level.player.origin - self.origin ); var_2 = anglestoright( self.angles ); var_3 = vectordot( var_1, var_2 ); if ( var_3 > var_0 ) return 1; return 0; } gunship_line_attack( var_0, var_1 ) { var_2 = common_scripts\utility::getstruct( var_0, "targetname" ); var_3 = common_scripts\utility::getstruct( var_2.target, "targetname" ); var_4 = 3; if ( isdefined( var_1 ) ) var_4 = var_1; var_5 = common_scripts\utility::spawn_tag_origin(); var_5.origin = var_2.origin; var_5 moveto( var_3.origin, var_4 ); var_6 = gettime() + var_4 * 1000; var_7 = level.ac_130 common_scripts\utility::spawn_tag_origin(); var_8 = level.ac_130 get_gun_tag(); var_9 = level.ac_130 gettagorigin( "tag_flash_25mm_" + var_8 ); var_7.origin = var_9; var_7 linkto( level.ac_130, "tag_flash_25mm_" + var_8 ); while ( gettime() < var_6 ) { level.ac_130 thread ac130_magic_bullet( "25mm", var_5.origin ); var_7 maps\_utility::play_sound_on_entity( "ac130_25mm_fire_npc" ); wait 0.05; } var_5 delete(); var_7 delete(); } gunship_line_attack_death() { var_0 = level.player.origin + anglestoforward( level.player getplayerangles() ) * 1000; var_1 = level.player.origin + anglestoforward( level.player getplayerangles() ) * -100; var_2 = 3; var_3 = common_scripts\utility::spawn_tag_origin(); var_3.origin = var_0; var_3 moveto( var_1, var_2 ); var_4 = gettime() + var_2 * 1000; var_5 = level.ac_130 common_scripts\utility::spawn_tag_origin(); var_6 = level.ac_130 get_gun_tag(); var_7 = level.ac_130 gettagorigin( "tag_flash_25mm_" + var_6 ); var_5.origin = var_7; var_5 linkto( level.ac_130, "tag_flash_25mm_" + var_6 ); while ( gettime() < var_4 ) { level.ac_130 thread ac130_magic_bullet( "25mm", var_3.origin ); var_5 maps\_utility::play_sound_on_entity( "ac130_25mm_fire_npc" ); wait 0.05; } var_3 delete(); var_5 delete(); } gunship_line_attack_fake( var_0, var_1, var_2 ) { var_3 = common_scripts\utility::getstruct( var_0, "targetname" ); var_4 = common_scripts\utility::getstruct( var_3.target, "targetname" ); var_5 = 3; var_6 = common_scripts\utility::spawn_tag_origin(); var_6.origin = var_1; if ( isdefined( var_2 ) ) var_5 = var_2; var_7 = common_scripts\utility::spawn_tag_origin(); var_7.origin = var_3.origin; var_7 moveto( var_4.origin, var_5 ); var_8 = gettime() + var_5 * 1000; while ( gettime() < var_8 ) { thread ac130_magic_bullet_fake( "25mm", var_1, var_7.origin ); var_6 maps\_utility::play_sound_on_entity( "ac130_25mm_fire_npc" ); wait 0.05; } var_7 delete(); var_6 delete(); }