4258 lines
134 KiB
Plaintext
4258 lines
134 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
section_main()
|
|
{
|
|
level.timestep = 0.05;
|
|
level.rog_explosion_radius = [];
|
|
level.rog_explosion_radius["rod"] = 8112;
|
|
level.rog_explosion_radius["danger_close"] = 10050;
|
|
level.rog_explosion_radius["missile"] = 1536;
|
|
level.rog_explosion_radius["tank"] = 512;
|
|
level.rog_explosion_grow_time = 3;
|
|
level.crater_array = [];
|
|
level.rog_blast_markers = [];
|
|
level.rog_max_waypoints = 160;
|
|
level.rog_current_lookat_node_index = 0;
|
|
level.rog_reticle_hieght = -127675;
|
|
level.rog_active_visibilty_volume = undefined;
|
|
level.rog_visibility_volume_index = 0;
|
|
level.rog_train = [];
|
|
level.current_target_hud_count = 0;
|
|
level.rog_target_models = [];
|
|
level.rog_fx_delay = 0.25;
|
|
level.rog_ff_fail = 0;
|
|
level.rog_track_fail = 0;
|
|
level.rog_section = 0;
|
|
level.rog_in_flight = 0;
|
|
level.rog_strike_active = 0;
|
|
level.rog_full_sequence_max_time = 90.0;
|
|
level.rog_num_enemy_targets_killed = 0;
|
|
level.rog_achievement_target_count = 0;
|
|
level.rog_achievement_target_count_adjustment = 0;
|
|
level.vfx_debug_do_rog_impact_effect = 1;
|
|
level.vfx_debug_do_rog_post_hit_vfx = 0;
|
|
level.vfx_debug_do_structure_destruction = 1;
|
|
level.vfx_debug_do_shockwave = 0;
|
|
level.rog_pass_fail = [ "allies", "axis" ];
|
|
level.rog_pass_fail["allies"] = [ "a", "b", "c", "targets" ];
|
|
level.rog_pass_fail["axis"] = [ "a", "b", "c", "targets" ];
|
|
level.rog_pass_fail["allies"]["a"] = 0;
|
|
level.rog_pass_fail["allies"]["b"] = 0;
|
|
level.rog_pass_fail["allies"]["c"] = 20;
|
|
level.rog_pass_fail["allies"]["targets"] = 0;
|
|
level.rog_pass_fail["axis"]["a"] = 2;
|
|
level.rog_pass_fail["axis"]["b"] = 2;
|
|
level.rog_pass_fail["axis"]["c"] = 1;
|
|
level.rog_pass_fail["axis"]["targets"] = 0;
|
|
level.rog_single_velocity_max = 54000.0;
|
|
level.rog_single_acceleration = 90000;
|
|
level.rog_uav_lookat_pos = [];
|
|
level.rog_uav_lookat_pos[0] = ( -704, -10769, -128435 );
|
|
level.rog_uav_lookat_pos[1] = ( -9108, -55463, -128435 );
|
|
level.rog_uav_lookat_pos[2] = ( -1677, -47165, -128435 );
|
|
level.rog_uav_lookat_pos[3] = ( 2862, -30098, -128435 );
|
|
level.rog_uav_lookat_pos[4] = ( -10950, -11861, -128435 );
|
|
level.rog_uav_lookat_pos[5] = ( -7046, 13586, -128435 );
|
|
level.rog_uav_lookat_pos[6] = ( -25438, 28952, -128435 );
|
|
level.static_lines = [];
|
|
level.static_lines[0] = "ac130_overlay_pip_static_a";
|
|
level.static_lines[1] = "ac130_overlay_pip_static_b";
|
|
level.static_lines[2] = "ac130_overlay_pip_static_c";
|
|
maps\_utility::add_hint_string( "activate_console_hint", &"LOKI_ACTIVATE_CONSOLE", ::console_hint_button_press );
|
|
maps\_utility::add_hint_string( "activate_console_hint_pc", &"LOKI_ACTIVATE_CONSOLE_PC", ::console_hint_button_press_pc );
|
|
maps\_utility::add_hint_string( "press_to_fire", &"LOKI_PRESS_TO_FIRE", ::fire_hint_button_press );
|
|
}
|
|
|
|
section_precache()
|
|
{
|
|
precacheturret( "player_view_controller" );
|
|
precacheturret( "player_view_controller_loki" );
|
|
precacherumble( "steady_rumble" );
|
|
precachemodel( "ac_prs_ter_crater_a_1" );
|
|
precachemodel( "afr_bg_building_04" );
|
|
precachemodel( "loki_rog_crater_01" );
|
|
precachemodel( "loki_rog_dish_frame_destroyed" );
|
|
precachemodel( "tag_turret" );
|
|
precachemodel( "vehicle_m880_launcher_low" );
|
|
precachemodel( "vehicle_m880_launcher_destroyed_low" );
|
|
precachemodel( "vehicle_uav" );
|
|
precachemodel( "projectile_sidewinder_missile" );
|
|
precachemodel( "vehicle_battle_hind_destroyed" );
|
|
precachemodel( "vehicle_t90ms_tank_destroyed_iw6_low" );
|
|
precachemodel( "vehicle_t90ms_tank_iw6_low" );
|
|
precachemodel( "vehicle_m1a2_abrams_iw6_low" );
|
|
precachemodel( "vehicle_m1a2_abrams_iw6_dmg_low" );
|
|
precachemodel( "loki_rog_dish_d1" );
|
|
precachemodel( "loki_rog_dish_d2" );
|
|
precachemodel( "loki_rog_dish_d3" );
|
|
precachemodel( "loki_rog_dish_d4" );
|
|
precachemodel( "loki_rog_dish_d5" );
|
|
precachemodel( "loki_rog_dish_d6" );
|
|
precachemodel( "loki_rog_dish_d7" );
|
|
precachemodel( "loki_rog_dish_d8" );
|
|
precachemodel( "vehicle_mig29_destroyed_back_low" );
|
|
precachemodel( "vehicle_mig29_destroyed_front_low" );
|
|
precachemodel( "vehicle_mig29_destroyed_tail_piece_low" );
|
|
precacheitem( "hunted_crash_missile" );
|
|
precacheshader( "ac130_overlay_pip_static_a" );
|
|
precacheshader( "ac130_overlay_pip_static_b" );
|
|
precacheshader( "ac130_overlay_pip_static_c" );
|
|
maps\loki_rog_hud::section_precache();
|
|
}
|
|
|
|
section_flag_inits()
|
|
{
|
|
common_scripts\utility::flag_init( "starting_anim_done" );
|
|
common_scripts\utility::flag_init( "attack_pressed" );
|
|
common_scripts\utility::flag_init( "dont_show_pull_trigger_hint" );
|
|
common_scripts\utility::flag_init( "dont_show_zoom_hint" );
|
|
common_scripts\utility::flag_init( "final_descent_active" );
|
|
common_scripts\utility::flag_init( "skip_start_vo" );
|
|
common_scripts\utility::flag_init( "ROG_can_fire" );
|
|
common_scripts\utility::flag_init( "player_is_firing" );
|
|
common_scripts\utility::flag_init( "allies_been_hit" );
|
|
common_scripts\utility::flag_init( "enemies_been_hit" );
|
|
common_scripts\utility::flag_init( "rog_intro_player_flipped_switch" );
|
|
common_scripts\utility::flag_init( "ROG_is_cooling_down" );
|
|
common_scripts\utility::flag_init( "ROG_hit_loc_1" );
|
|
common_scripts\utility::flag_init( "ROG_hit_loc_2" );
|
|
common_scripts\utility::flag_init( "ROG_hit_loc_3" );
|
|
common_scripts\utility::flag_init( "ROG_hit_loc_4" );
|
|
common_scripts\utility::flag_init( "ROG_exit" );
|
|
common_scripts\utility::flag_init( "ROG_section_done" );
|
|
common_scripts\utility::flag_init( "ROG_take_in_battle_scene" );
|
|
common_scripts\utility::flag_init( "ROG_look_at_sat_farm" );
|
|
common_scripts\utility::flag_init( "ROG_look_at_train" );
|
|
common_scripts\utility::flag_init( "ROG_look_at_main_base" );
|
|
common_scripts\utility::flag_init( "ROG_look_at_airfield" );
|
|
common_scripts\utility::flag_init( "ROG_take_in_destruction" );
|
|
common_scripts\utility::flag_init( "ROG_early_out" );
|
|
common_scripts\utility::flag_init( "ROG_script_done" );
|
|
common_scripts\utility::flag_init( "ROG_no_fail" );
|
|
common_scripts\utility::flag_init( "ROG_VO_script_active" );
|
|
common_scripts\utility::flag_init( "click_too_soon" );
|
|
common_scripts\utility::flag_init( "rog_controls_start_done" );
|
|
common_scripts\utility::flag_init( "rog_vo_0" );
|
|
common_scripts\utility::flag_init( "ROG_passed" );
|
|
}
|
|
|
|
rog_start()
|
|
{
|
|
common_scripts\utility::flag_init( "space_breach_vo_done" );
|
|
thread delete_all_ents();
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
maps\_utility::battlechatter_off( "axis" );
|
|
maps\loki_util::player_move_to_checkpoint_start( "rog" );
|
|
maps\loki_util::spawn_allies();
|
|
common_scripts\utility::flag_set( "skip_start_vo" );
|
|
common_scripts\utility::flag_set( "space_breach_vo_done" );
|
|
|
|
foreach ( var_1 in level.allies )
|
|
{
|
|
var_1 maps\_utility::disable_ai_color();
|
|
var_1 setgoalpos( var_1.origin );
|
|
}
|
|
|
|
maps\loki_space_breach::create_rog_controls();
|
|
thread maps\loki_space_breach::set_flags_on_input();
|
|
common_scripts\utility::flag_set( "turn_off_rogs" );
|
|
level notify( "stop_close_rogs" );
|
|
}
|
|
|
|
rog()
|
|
{
|
|
maps\loki_util::loki_autosave_by_name_silent( "rog" );
|
|
|
|
if ( !common_scripts\utility::flag( "skip_start_vo" ) )
|
|
{
|
|
wait_till_player_uses_terminal();
|
|
maps\loki_util::loki_autosave_by_name_silent( "rog" );
|
|
}
|
|
|
|
thread maps\loki_fx::light_rog_threads();
|
|
maps\_utility::stop_exploder( "be_stm_01" );
|
|
common_scripts\utility::exploder( "lod_big_smoke" );
|
|
maps\loki_fx::fx_helmet_mask_off();
|
|
thread maps\loki_fx::fx_rog_amb_exp();
|
|
level thread rog_logic();
|
|
common_scripts\utility::flag_wait( "rog_done" );
|
|
common_scripts\utility::flag_wait( "ROG_script_done" );
|
|
rog_exit();
|
|
setsaveddvar( "sm_sunSampleSizeNear", ".15" );
|
|
maps\_utility::vision_set_fog_changes( "loki", 0 );
|
|
}
|
|
|
|
rog_init()
|
|
{
|
|
thread maps\loki_audio::sfx_set_rog_amb();
|
|
level.space_breathing_enabled = 0;
|
|
thread checking_for_hits();
|
|
level.player_mover = ( 0, 0, 0 );
|
|
level.rog_aoe_reticle = getent( "AOE", "targetname" );
|
|
level.rog_aoe_reticle hide();
|
|
level.rog_aoe_reticle notsolid();
|
|
|
|
for ( var_0 = 0; var_0 < 8; var_0++ )
|
|
{
|
|
level.rog_blast_markers[var_0] = getent( "blast_marker_" + var_0, "targetname" );
|
|
level.rog_blast_markers[var_0] notsolid();
|
|
level.rog_blast_markers[var_0] hide();
|
|
level.rog_blast_markers[var_0].time = undefined;
|
|
}
|
|
|
|
level.player.ignoreme = 1;
|
|
common_scripts\utility::flag_clear( "ROG_can_fire" );
|
|
level thread rog_setup_structures();
|
|
level.player hideviewmodel();
|
|
level.player disableweapons();
|
|
level.player allowcrouch( 0 );
|
|
level.player allowjump( 0 );
|
|
level.player allowlean( 0 );
|
|
level.player allowmelee( 0 );
|
|
level.player allowprone( 0 );
|
|
level.player allowsprint( 0 );
|
|
level.player allowads( 0 );
|
|
setsaveddvar( "scr_dof_enable", "0" );
|
|
level.uav_model = spawn( "script_model", level.player.origin );
|
|
level.uav_model setmodel( "vehicle_uav" );
|
|
level.uav_model.angles = level.player.angles;
|
|
level.player playerlinkto( level.uav_model, "TAG_PLAYER" );
|
|
setsaveddvar( "compass", 0 );
|
|
setsaveddvar( "ammoCounterHide", 1 );
|
|
setsaveddvar( "actionSlotsHide", 1 );
|
|
setsaveddvar( "hud_showStance", 0 );
|
|
level maps\_utility::delaythread( 0.1, maps\loki_rog_hud::rog_hud );
|
|
rog_achievement_gather_targets();
|
|
rog_update_visibility_volume_empty();
|
|
thread script_move_vehicles();
|
|
thread set_rog_section_gravity();
|
|
thread setup_rog_warscene();
|
|
level.player thread rog_uav_camera_move_audio();
|
|
level thread rog_check_early_out();
|
|
level thread rog_reveal_audio();
|
|
}
|
|
|
|
rog_mission_dialogue()
|
|
{
|
|
level endon( "fail" );
|
|
level thread maps\_utility::notify_delay( "ROG_initial_reveal", 17.7 );
|
|
maps\_utility::delaythread( 11.2, ::rog_update_visibility_volume );
|
|
maps\_utility::delaythread( 11.7, common_scripts\utility::flag_set, "ROG_can_fire" );
|
|
level.player setclientomnvar( "ui_loki_rog_message_progress", 12.0 );
|
|
wait 3.5;
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
maps\_utility::smart_radio_dialogue( "loki_us6_droneisenteringdesignated" );
|
|
wait 1.3;
|
|
maps\_utility::smart_radio_dialogue( "loki_us6_ohman" );
|
|
maps\_utility::smart_radio_dialogue( "loki_mrk_icarusfocusfireon" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
maps\_utility::smart_radio_dialogue( "loki_us3_targetingonlinefirewhen" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
level thread rog_vo_section_a();
|
|
common_scripts\utility::flag_wait( "ROG_look_at_train" );
|
|
wait 0.05;
|
|
|
|
if ( common_scripts\utility::flag( "missionfailed" ) )
|
|
return;
|
|
|
|
level thread maps\_utility::notify_delay( "early_fail_check", 4.95 );
|
|
maps\_utility::delaythread( 1.0, ::rog_update_visibility_volume_empty );
|
|
maps\_utility::delaythread( 0.5, common_scripts\utility::flag_clear, "ROG_can_fire" );
|
|
level.player common_scripts\utility::delaycall( 0.5, ::setclientomnvar, "ui_loki_rog_message_progress", 10.3 );
|
|
maps\_utility::delaythread( 0.5, ::rog_tag_train );
|
|
common_scripts\utility::flag_waitopen( "ROG_VO_script_active" );
|
|
thread maps\_utility::notify_delay( "ROG_reveal_allies", 6 );
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
maps\_utility::smart_radio_dialogue( "loki_mrk_icarusactualcommand" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
level maps\_utility::delaythread( 2.2, ::rog_update_visibility_volume );
|
|
level maps\_utility::delaythread( 2.7, common_scripts\utility::flag_set, "ROG_can_fire" );
|
|
wait 1;
|
|
level.rog_section = 1;
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
level.player setclientomnvar( "ui_loki_rog_section", 1 );
|
|
maps\_utility::smart_radio_dialogue( "loki_mrk_icarusnowfeedingyou" );
|
|
maps\_utility::smart_radio_dialogue( "loki_kgn_lockingintarget" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
level thread rog_vo_section_b();
|
|
wait 5.5;
|
|
maps\_utility::delaythread( 5.0, common_scripts\utility::flag_clear, "ROG_can_fire" );
|
|
maps\_utility::delaythread( 5.0, ::rog_update_visibility_volume_empty );
|
|
common_scripts\utility::flag_wait( "ROG_look_at_airfield" );
|
|
wait 0.05;
|
|
|
|
if ( common_scripts\utility::flag( "missionfailed" ) )
|
|
return;
|
|
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
level.player setclientomnvar( "ui_loki_rog_message_progress", 3.9 );
|
|
maps\_utility::smart_radio_dialogue( "loki_mrk_heavyarmorhasbeen" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
wait 0.5;
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
level maps\_utility::delaythread( 1.5, ::rog_update_visibility_volume );
|
|
maps\_utility::smart_radio_dialogue( "loki_mrk_groundunitsarebeing" );
|
|
level.player setclientomnvar( "ui_loki_rog_section", 2 );
|
|
level.rog_section = 2;
|
|
maps\_utility::delaythread( 0, common_scripts\utility::flag_set, "ROG_can_fire" );
|
|
maps\_utility::smart_radio_dialogue( "loki_gs3_visualconfirmedtargeting" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
level thread rog_vo_section_c();
|
|
common_scripts\utility::flag_wait_any( "ROG_take_in_destruction", "ROG_early_out" );
|
|
wait 0.05;
|
|
|
|
if ( common_scripts\utility::flag( "missionfailed" ) )
|
|
return;
|
|
|
|
level thread maps\loki_ending::ending_bink_display();
|
|
level thread maps\loki_ending::ending_ally_anims();
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
maps\_utility::smart_radio_dialogue( "loki_mrk_goodworkicaruslocal" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
wait 1.0;
|
|
common_scripts\utility::flag_set( "ROG_script_done" );
|
|
}
|
|
|
|
script_train_stuff_02()
|
|
{
|
|
var_0 = getvehiclenode( "node_target_mover_train_01", "targetname" );
|
|
var_1 = [ 1.0, 0.75, 0.85, 0.85, 0.85, 1.0, 1.15, 1.0 ];
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
var_3 = getent( "script_model_train_0" + ( var_2 + 1 ), "targetname" );
|
|
var_4 = getent( "vehicle_target_mover_train_0" + ( var_2 + 1 ), "targetname" );
|
|
var_3 linkto( var_4 );
|
|
var_4 attachpath( var_0 );
|
|
level.rog_train[var_2] = var_3;
|
|
level.rog_train_veh[var_2] = var_4;
|
|
wait( var_1[var_2] );
|
|
var_4 maps\_vehicle::gopath();
|
|
}
|
|
|
|
level.rog_closest_path_node = var_0;
|
|
}
|
|
|
|
script_move_train_02( var_0, var_1 )
|
|
{
|
|
|
|
}
|
|
|
|
script_move_vehicles()
|
|
{
|
|
level maps\_utility::delaythread( 1.0, ::script_train_stuff_02 );
|
|
level thread script_missile_attacks01();
|
|
thread script_vehicle_jets_01();
|
|
thread script_shooting_tanks_01();
|
|
thread script_shooting_tanks_02();
|
|
thread script_shooting_tanks_03();
|
|
thread script_shooting_tanks_04();
|
|
thread script_shooting_tanks_05();
|
|
thread script_shooting_tanks_06();
|
|
thread script_shooting_tanks_07();
|
|
wait 7;
|
|
level notify( "delete_start_tanks" );
|
|
level thread rog_spawn_and_move( "base_array_intro_flyby_choppers" );
|
|
common_scripts\utility::flag_wait( "ROG_look_at_airfield" );
|
|
thread script_shooting_tanks_08();
|
|
thread script_shooting_tanks_09();
|
|
}
|
|
|
|
script_shooting_tanks_01()
|
|
{
|
|
var_0 = getentarray( "targets_spaceport_firing01", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
wait 23;
|
|
var_1 = getentarray( "targets_spaceport_firing01_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( 6880, -23728, -127675 ) );
|
|
|
|
wait 30;
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position" );
|
|
}
|
|
|
|
script_shooting_tanks_04()
|
|
{
|
|
var_0 = getentarray( "targets_spaceport_firing04", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
wait 28;
|
|
var_1 = getentarray( "targets_spaceport_firing04_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( 7896, -13914, -127675 ) );
|
|
|
|
wait 34;
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position" );
|
|
}
|
|
|
|
script_shooting_tanks_02()
|
|
{
|
|
var_0 = getentarray( "targets_spaceport_firing02", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
wait 32;
|
|
var_1 = getentarray( "targets_spaceport_firing02_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( 6555, -575, -127565 ) );
|
|
|
|
wait 34;
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position" );
|
|
}
|
|
|
|
script_shooting_tanks_03()
|
|
{
|
|
var_0 = getentarray( "targets_spaceport_firing03", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
wait 32;
|
|
var_1 = getentarray( "targets_spaceport_firing03_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( 4109, 9387, -127565 ) );
|
|
|
|
wait 35;
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position" );
|
|
}
|
|
|
|
script_shooting_tanks_05()
|
|
{
|
|
var_0 = getentarray( "targets_spaceport_firing05", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
wait 32;
|
|
var_1 = getentarray( "targets_spaceport_firing05_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( 4109, 9387, -127565 ) );
|
|
|
|
wait 35;
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position" );
|
|
}
|
|
|
|
script_shooting_tanks_06()
|
|
{
|
|
var_0 = getentarray( "targets_spaceport_firing06", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
wait 40;
|
|
var_1 = getentarray( "targets_spaceport_firing06_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( -12067, 5129, -127565 ) );
|
|
|
|
wait 35;
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position" );
|
|
}
|
|
|
|
script_shooting_tanks_07()
|
|
{
|
|
var_0 = getentarray( "targets_spaceport_firing07", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
wait 40;
|
|
var_1 = getentarray( "targets_spaceport_firing07_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( -12067, 5129, -127565 ) );
|
|
|
|
wait 35;
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position" );
|
|
}
|
|
|
|
script_shooting_tanks_08()
|
|
{
|
|
var_0 = getentarray( "targets_west_firing01", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
wait 50;
|
|
var_1 = getentarray( "targets_west_firing01_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( -10551, 3849, -127565 ) );
|
|
}
|
|
|
|
script_shooting_tanks_09()
|
|
{
|
|
var_0 = getentarray( "targets_airfield_north_firing01", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
wait 50;
|
|
var_1 = getentarray( "targets_airfield_north_firing01_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( -6665, 10065, -127565 ) );
|
|
}
|
|
|
|
script_shooting_tanks_10()
|
|
{
|
|
var_0 = getentarray( "targets_airfield_north_firing02", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
wait 55;
|
|
var_1 = getentarray( "targets_airfield_north_firing02_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( 10671, 9063, -127565 ) );
|
|
}
|
|
|
|
script_vehicle_jets_01()
|
|
{
|
|
wait 0;
|
|
thread maps\loki_audio::sfx_setup_jet_nodes();
|
|
level thread rog_spawn_and_move( "vehicle_jets_high_dishfield_01" );
|
|
thread script_air_strike_exp01();
|
|
thread maps\loki_audio::sfx_jet_passby_01();
|
|
wait 1;
|
|
level thread rog_spawn_and_move( "vehicle_jet_dishes_00" );
|
|
level thread rog_spawn_and_move( "vehicle_jet_dishes_01" );
|
|
wait 3;
|
|
level thread rog_spawn_and_move( "vehicle_jet_dishes_04" );
|
|
wait 2;
|
|
level thread rog_spawn_and_move( "vehicle_jet_dishes_02", undefined, 1 );
|
|
thread maps\loki_audio::sfx_jet_passby_02();
|
|
wait 9;
|
|
level thread rog_spawn_and_move( "vehicle_train_sequence_jet_01" );
|
|
wait 4;
|
|
level thread rog_spawn_and_move( "vehicle_train_sequence_jet_02" );
|
|
thread maps\loki_audio::sfx_jet_passby_04();
|
|
wait 1;
|
|
level thread rog_spawn_and_move( "vehicle_train_sequence_jet_03" );
|
|
thread maps\loki_audio::sfx_jet_passby_05();
|
|
wait 7;
|
|
level thread rog_spawn_and_move( "vehicle_jet_spaceport_01" );
|
|
level thread rog_airstrike( "vehicle_jet_spaceport_01", ::script_airstrike_exp02 );
|
|
thread maps\loki_audio::sfx_jet_passby_08();
|
|
wait 9;
|
|
level thread rog_spawn_and_move( "vehicle_jet_spaceport_02", undefined, 0 );
|
|
level thread rog_airstrike( "vehicle_jet_spaceport_02", ::script_airstrike_exp03 );
|
|
wait 0;
|
|
wait 3;
|
|
wait 9;
|
|
level thread rog_spawn_and_move( "vehicle_jet_airstrip_01", undefined, 0 );
|
|
level thread rog_airstrike( "vehicle_jet_airstrip_01", ::script_airstrike_exp04 );
|
|
wait 9;
|
|
level thread rog_spawn_and_move( "vehicle_jet_airstrip_02", undefined, 1 );
|
|
level thread rog_airstrike( "vehicle_jet_airstrip_02", ::script_airstrike_exp05 );
|
|
thread maps\loki_audio::sfx_jet_passby_10();
|
|
level thread rog_spawn_and_move( "vehicle_jet_spaceport_04" );
|
|
wait 20;
|
|
level thread rog_spawn_and_move( "base_array_ambient_mig29_missile_dive_2_buddy" );
|
|
thread maps\loki_audio::sfx_jet_passby_11();
|
|
}
|
|
|
|
rog_airstrike( var_0, var_1 )
|
|
{
|
|
var_2 = var_0 + "_vehicle";
|
|
var_3 = getentarray( var_2, "targetname" );
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( isalive( var_5 ) )
|
|
{
|
|
var_5 thread [[ var_1 ]]();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
script_air_strike_exp01()
|
|
{
|
|
wait 15;
|
|
common_scripts\utility::exploder( "strafe_exp01" );
|
|
wait 0.3;
|
|
common_scripts\utility::exploder( "strafe_exp02" );
|
|
wait 0.3;
|
|
common_scripts\utility::exploder( "strafe_exp03" );
|
|
wait 2.5;
|
|
common_scripts\utility::exploder( "strafe_exp05" );
|
|
wait 0.3;
|
|
common_scripts\utility::exploder( "strafe_exp04" );
|
|
wait 0.3;
|
|
common_scripts\utility::exploder( "strafe_exp07" );
|
|
wait 1.5;
|
|
common_scripts\utility::exploder( "strafe_exp08" );
|
|
wait 0.3;
|
|
common_scripts\utility::exploder( "strafe_exp06" );
|
|
}
|
|
|
|
script_airstrike_exp02()
|
|
{
|
|
self endon( "death" );
|
|
wait 18.5;
|
|
common_scripts\utility::exploder( "strafe_exp07" );
|
|
wait 0.4;
|
|
common_scripts\utility::exploder( "strafe_exp08" );
|
|
wait 0.3;
|
|
common_scripts\utility::exploder( "strafe_exp06" );
|
|
}
|
|
|
|
script_airstrike_exp03()
|
|
{
|
|
self endon( "death" );
|
|
wait 18.5;
|
|
common_scripts\utility::exploder( "strafe_exp07" );
|
|
wait 1;
|
|
common_scripts\utility::exploder( "strafe_exp05" );
|
|
wait 0.7;
|
|
common_scripts\utility::exploder( "strafe_exp09" );
|
|
wait 0.3;
|
|
common_scripts\utility::exploder( "strafe_exp10" );
|
|
}
|
|
|
|
script_airstrike_exp04()
|
|
{
|
|
self endon( "death" );
|
|
wait 17.5;
|
|
common_scripts\utility::exploder( "strafe_exp06" );
|
|
wait 0.4;
|
|
common_scripts\utility::exploder( "strafe_exp11" );
|
|
wait 0.3;
|
|
common_scripts\utility::exploder( "strafe_exp04" );
|
|
wait 1;
|
|
common_scripts\utility::exploder( "strafe_exp03" );
|
|
}
|
|
|
|
script_airstrike_exp05()
|
|
{
|
|
self endon( "death" );
|
|
wait 19.5;
|
|
common_scripts\utility::exploder( "strafe_exp09" );
|
|
wait 0.4;
|
|
common_scripts\utility::exploder( "strafe_exp10" );
|
|
wait 0.7;
|
|
common_scripts\utility::exploder( "strafe_exp12" );
|
|
wait 0.8;
|
|
common_scripts\utility::exploder( "strafe_exp01" );
|
|
}
|
|
|
|
script_missile_attacks01()
|
|
{
|
|
wait 7;
|
|
var_0 = getentarray( "targets_missile_launcher_area_01_model", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 notify( "update_firing_position", ( -8108, -2642, -127714 ) );
|
|
|
|
wait 10;
|
|
var_0 = getentarray( "targets_missile_launcher_area_01_model", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 notify( "update_firing_position", ( -1196, -3108, -127730 ) );
|
|
|
|
wait 6;
|
|
var_0 = getentarray( "targets_missile_launcher_area_01_model", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 notify( "update_firing_position", ( -6274, 574, -127730 ) );
|
|
|
|
wait 2;
|
|
thread script_missile_attacks02();
|
|
}
|
|
|
|
script_missile_attacks02()
|
|
{
|
|
var_0 = getentarray( "targets_missile_launcher_area_02", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done", ( 7174, -19454, -127728 ) );
|
|
wait 7;
|
|
var_1 = getentarray( "targets_missile_launcher_area_02_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( 7206, -10192, -127728 ) );
|
|
|
|
wait 7;
|
|
var_1 = getentarray( "targets_missile_launcher_area_02_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( 6952, -7622, -127728 ) );
|
|
|
|
common_scripts\utility::flag_wait( "ROG_look_at_airfield" );
|
|
thread script_missile_attacks03();
|
|
}
|
|
|
|
script_missile_attacks03()
|
|
{
|
|
var_0 = getentarray( "targets_missile_launcher_area_03", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done", ( -14612, 8762, -127728 ) );
|
|
wait 7;
|
|
var_1 = getentarray( "targets_missile_launcher_area_03_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( -12860, 2976, -127728 ) );
|
|
|
|
wait 7;
|
|
var_1 = getentarray( "targets_missile_launcher_area_03_model", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 notify( "update_firing_position", ( -7074, 12432, -127728 ) );
|
|
}
|
|
|
|
rog_spawn_and_move( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = getentarray( var_0, "targetname" );
|
|
var_4 = [];
|
|
|
|
foreach ( var_8, var_6 in var_3 )
|
|
{
|
|
var_6.script_cheap = 1;
|
|
var_7 = var_6 maps\_vehicle::spawn_vehicle_and_gopath();
|
|
|
|
if ( isdefined( var_2 ) && var_2 )
|
|
{
|
|
var_7.targetname = var_0 + "_vehicle_" + var_8;
|
|
var_7 thread rog_audio_hook();
|
|
}
|
|
else
|
|
var_7.targetname = var_0 + "_vehicle";
|
|
|
|
var_7 thread rog_target_vehicle_tracking();
|
|
var_7 thread rog_target_handle_explosions();
|
|
var_7 thread check_for_rog_death( var_7 );
|
|
var_4 = common_scripts\utility::array_add( var_4, var_7 );
|
|
}
|
|
|
|
if ( isdefined( var_2 ) && !var_2 )
|
|
level thread rog_audio_hook_group( var_0 );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
level thread script_delete_vehicles( var_4, var_1 );
|
|
}
|
|
|
|
rog_audio_hook_group( var_0 )
|
|
{
|
|
var_1 = undefined;
|
|
|
|
if ( "vehicle_jet_spaceport_02" == var_0 )
|
|
var_1 = level.jet_passby_09b;
|
|
else if ( "vehicle_jet_airstrip_01" == var_0 )
|
|
var_1 = level.jet_passby_10;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
for ( var_2 = getentarray( var_0 + "_vehicle", "targetname" ); var_2.size > 0; var_2 = getentarray( var_0 + "_vehicle", "targetname" ) )
|
|
wait 0.2;
|
|
|
|
var_1 notify( "destroyed" );
|
|
}
|
|
}
|
|
|
|
rog_audio_hook()
|
|
{
|
|
var_0 = undefined;
|
|
var_1 = undefined;
|
|
|
|
switch ( self.targetname )
|
|
{
|
|
case "vehicle_jet_dishes_02_vehicle_3":
|
|
var_0 = level.jet_passby_04;
|
|
break;
|
|
case "vehicle_jet_dishes_02_vehicle_5":
|
|
var_0 = level.jet_passby_04b;
|
|
break;
|
|
case "vehicle_jet_dishes_02_vehicle_4":
|
|
var_0 = level.jet_passby_05;
|
|
break;
|
|
case "vehicle_jet_dishes_02_vehicle_0":
|
|
var_0 = level.jet_passby_06;
|
|
break;
|
|
case "vehicle_jet_dishes_02_vehicle_1":
|
|
var_0 = level.jet_passby_06b;
|
|
break;
|
|
case "vehicle_jet_dishes_02_vehicle_2":
|
|
var_0 = level.jet_passby_07;
|
|
break;
|
|
case "vehicle_jet_airstrip_02_vehicle_2":
|
|
var_0 = level.jet_passby_11;
|
|
break;
|
|
case "vehicle_jet_airstrip_02_vehicle_0":
|
|
var_0 = level.jet_passby_12;
|
|
var_1 = level.jet_passby_15;
|
|
break;
|
|
case "vehicle_jet_airstrip_02_vehicle_1":
|
|
var_0 = level.jet_passby_13;
|
|
break;
|
|
case "vehicle_jet_airstrip_02_vehicle_3":
|
|
var_0 = level.jet_passby_14;
|
|
break;
|
|
}
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
self waittill( "death" );
|
|
var_0 notify( "destroyed" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 notify( "destroyed" );
|
|
}
|
|
}
|
|
|
|
rog_spawn_and_move_friendly( var_0, var_1 )
|
|
{
|
|
var_2 = getentarray( var_0, "targetname" );
|
|
var_3 = [];
|
|
|
|
foreach ( var_5 in var_2 )
|
|
{
|
|
var_6 = var_5 maps\_vehicle::spawn_vehicle_and_gopath();
|
|
var_6 thread check_for_rog_death( var_6 );
|
|
var_6 thread rog_target_vehicle_tracking();
|
|
var_3 = common_scripts\utility::array_add( var_3, var_6 );
|
|
}
|
|
|
|
if ( isdefined( var_1 ) )
|
|
level thread script_delete_vehicles( var_3, var_1 );
|
|
}
|
|
|
|
script_delete_vehicles( var_0, var_1 )
|
|
{
|
|
level waittill( var_1 );
|
|
|
|
foreach ( var_3 in var_0 )
|
|
var_3 delete();
|
|
}
|
|
|
|
wait_till_player_uses_terminal()
|
|
{
|
|
if ( maps\_utility::is_gen4() )
|
|
setsaveddvar( "r_mbEnable", 0 );
|
|
|
|
thread control_screen_bink_init();
|
|
|
|
if ( !isdefined( level.breach_anim_node ) )
|
|
maps\loki_space_breach::create_anim_node();
|
|
|
|
while ( !isdefined( level.breach_anim_node ) )
|
|
common_scripts\utility::waitframe();
|
|
|
|
var_0 = 50;
|
|
var_1 = getent( "rog_terminal", "targetname" );
|
|
var_1 wait_for_player_to_use_chair();
|
|
thread maps\loki_audio::sfx_loki_control_room_start();
|
|
maps\loki_util::player_boundaries_off();
|
|
|
|
if ( isdefined( level.glow_console ) )
|
|
level.glow_console delete();
|
|
|
|
level.allies[0] notify( "stop nags" );
|
|
level notify( "kill_thrusters" );
|
|
var_2 = maps\_utility::spawn_anim_model( "player_rig", level.breach_anim_node.origin );
|
|
var_2.angles = level.player.angles;
|
|
var_2 hide();
|
|
var_3 = [];
|
|
var_3["player"] = var_2;
|
|
level.breach_anim_node maps\_anim::anim_first_frame( var_3, "breach_rog_controls_start" );
|
|
level.player disableweapons();
|
|
level.player playerlinktoblend( var_2, "tag_player", 0.5 );
|
|
wait 0.5;
|
|
thread put_ally_in_chair();
|
|
var_4 = level.player getweaponammoclip( level.breach_weapon );
|
|
|
|
if ( var_4 < 10 )
|
|
var_4 = 20;
|
|
|
|
level.player setweaponammoclip( level.breach_weapon, var_4 );
|
|
var_5 = 60;
|
|
level.player playerlinktodelta( var_2, "tag_player", 1, var_5, var_5, var_5, var_5, 1 );
|
|
wait 0.1;
|
|
var_5 = 1;
|
|
level.player playerlinktodelta( var_2, "tag_player", 1, var_5, var_5, var_5, var_5, 1 );
|
|
var_2 show();
|
|
level.player_rig = var_2;
|
|
common_scripts\utility::flag_set( "console_activated" );
|
|
level notify( "player_rog_screen_reboot" );
|
|
thread player_console_anims( var_2 );
|
|
wait 0.1;
|
|
level.allies[0] notify( "stop nags" );
|
|
thread manage_player_linked_view( var_2 );
|
|
var_5 = 32;
|
|
maps\_utility::smart_radio_dialogue( "loki_kgn_merrickbeadvisedcurveball" );
|
|
maps\_utility::smart_radio_dialogue( "loki_mrk_copythat" );
|
|
common_scripts\utility::flag_set( "space_breach_vo_done" );
|
|
|
|
if ( !common_scripts\utility::flag( "rog_controls_start_done" ) )
|
|
thread maps\_utility::smart_radio_dialogue( "loki_gs3_wilcofiringforeffect" );
|
|
|
|
thread maps\_utility::smart_radio_dialogue( "loki_gs3_thompsonyouhavetargeting" );
|
|
common_scripts\utility::flag_wait( "rog_controls_start_done" );
|
|
wait 2.0;
|
|
level thread start_rog_fail_timer( 25 );
|
|
level notify( "player_rog_screen_wait" );
|
|
var_6 = [ "loki_us3_launchtherods", "loki_us3_ourforcesneedsupport", "loki_us3_releasethepayloadsnow" ];
|
|
level.allies[0] thread maps\loki_space_breach::play_nag_after_delay( 5.0, var_6, "attack_pressed" );
|
|
maps\loki_util::waittill_fire_trigger_activate( "press_to_fire", 1 );
|
|
common_scripts\utility::flag_set( "rog_intro_player_flipped_switch" );
|
|
thread maps\loki_audio::sfx_control_room_launch();
|
|
level.allies[0] notify( "stop nags" );
|
|
level notify( "player_rog_screen_fire" );
|
|
var_1 makeunusable();
|
|
thread delete_all_ents();
|
|
wait 3.0;
|
|
thread maps\loki_audio::sfx_control_room_rog_launch();
|
|
thread fire_rogs_in_space();
|
|
wait 0.95;
|
|
thread maps\_utility::smart_radio_dialogue( "loki_us3_allrodsaway" );
|
|
wait 3.0;
|
|
thread maps\_utility::smart_radio_dialogue( "loki_us3_connectingtotargeting" );
|
|
level waittill( "rog_controls_fire_done" );
|
|
level notify( "player_rog_screen_zoom" );
|
|
wait 1.0;
|
|
wait 1.5;
|
|
setsaveddvar( "cg_cinematicFullScreen", "1" );
|
|
wait 0.5;
|
|
level.player unlink();
|
|
level.allies[0] stopanimscripted();
|
|
level.allies[1] stopanimscripted();
|
|
maps\_utility::delaythread( 1.5, ::enable_weapons );
|
|
level notify( "switching_to_rog" );
|
|
}
|
|
|
|
wait_for_player_to_use_chair()
|
|
{
|
|
while ( common_scripts\utility::flag( "use_pressed" ) )
|
|
wait 0.1;
|
|
|
|
var_0 = getent( "rog_controls_use_trigger", "targetname" );
|
|
|
|
if ( level.console || level.player usinggamepad() )
|
|
maps\loki_util::waittill_trigger_activate_looking_at( self, "activate_console_hint", 100, 0.5, undefined, 1, var_0 );
|
|
else
|
|
maps\loki_util::waittill_trigger_activate_looking_at( self, "activate_console_hint_pc", 100, 0.5, undefined, 1, var_0 );
|
|
}
|
|
|
|
manage_player_linked_view( var_0 )
|
|
{
|
|
level.player playerlinktodelta( var_0, "tag_player", 1, 13, 30, 60, 13, 1 );
|
|
wait 3.0;
|
|
level.player playerlinktodelta( var_0, "tag_player", 1, 13, 50, 60, 10, 1 );
|
|
}
|
|
|
|
manage_use_region()
|
|
{
|
|
self endon( "trigger" );
|
|
var_0 = getent( "rog_controls_use_trigger", "targetname" );
|
|
self sethintstring( &"SCRIPT_HOLD_TO_USE" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player istouching( var_0 ) )
|
|
self makeusable();
|
|
else
|
|
self makeunusable();
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
put_ally_in_chair()
|
|
{
|
|
var_0 = [];
|
|
var_0["ally_1"] = level.allies[1];
|
|
level.breach_anim_node thread maps\_anim::anim_loop( var_0, "rog_intro", "stop_loops" );
|
|
level waittill( "switching_to_rog" );
|
|
level.breach_anim_node notify( "stop_loops" );
|
|
}
|
|
|
|
player_console_anims( var_0 )
|
|
{
|
|
var_1 = [];
|
|
var_1["player"] = var_0;
|
|
level.breach_anim_node maps\_anim::anim_single( var_1, "breach_rog_controls_start" );
|
|
common_scripts\utility::flag_set( "rog_controls_start_done" );
|
|
level.breach_anim_node thread maps\_anim::anim_loop( var_1, "breach_rog_controls_wait_loop" );
|
|
level waittill( "player_rog_screen_fire" );
|
|
level.breach_anim_node maps\_anim::anim_single( var_1, "breach_rog_controls_fire" );
|
|
level notify( "rog_controls_fire_done" );
|
|
}
|
|
|
|
fire_rogs_in_space()
|
|
{
|
|
var_0 = getentarray( "pretarget_rog_sats", "script_noteworthy" );
|
|
var_1[0] = [ 1, 1.5, 1, 0.8, 0.8, 1 ];
|
|
var_1[1] = [ 1.5, 1, 0.8, 1, 1, 1 ];
|
|
var_1[2] = [ 0.8, 1, 1.5, 1, 1, 1 ];
|
|
var_1[3] = [ 1, 0.8, 0.8, 1, 1.5, 1 ];
|
|
var_2 = 0;
|
|
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
var_4 thread launch_rogs( var_1[var_2] );
|
|
var_2++;
|
|
}
|
|
}
|
|
|
|
zoom_player_view( var_0, var_1 )
|
|
{
|
|
level endon( "switching_to_rog" );
|
|
level.player lerpfov( var_0, var_1 );
|
|
}
|
|
|
|
launch_rogs( var_0 )
|
|
{
|
|
var_1 = [ 0, 1, 2, 3, 4, 5 ];
|
|
var_2 = common_scripts\utility::array_randomize( var_1 );
|
|
|
|
for ( var_3 = 0; var_3 < 6; var_3++ )
|
|
{
|
|
if ( var_3 < 6 )
|
|
var_4 = "tag_rogfx_0" + var_2[var_3];
|
|
else
|
|
var_4 = "tag_rogfx_" + var_2[var_3];
|
|
|
|
playfxontag( common_scripts\utility::getfx( "loki_rog_close_1_missile" ), self, var_4 );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
wait 0.1;
|
|
|
|
for ( var_3 = 0; var_3 < 6; var_3++ )
|
|
{
|
|
if ( var_3 < 6 )
|
|
var_4 = "tag_rogfx_0" + var_2[var_3];
|
|
else
|
|
var_4 = "tag_rogfx_" + var_2[var_3];
|
|
|
|
killfxontag( common_scripts\utility::getfx( "loki_rog_close_1_missile" ), self, var_4 );
|
|
playfxontag( common_scripts\utility::getfx( "loki_rog_trail_close_2_emit" ), self, var_4 );
|
|
wait( var_0[var_3] );
|
|
}
|
|
}
|
|
|
|
control_screen_bink_init()
|
|
{
|
|
setsaveddvar( "cg_cinematicFullScreen", "0" );
|
|
show_hide_all_static( 1 );
|
|
level thread play_cinematic_thread( "loki_rog_intro_offline", "player_rog_screen_reboot" );
|
|
thread maps\loki_audio::sfx_laptop_offline_lp();
|
|
level waittill( "player_rog_screen_reboot" );
|
|
thread maps\loki_audio::sfx_laptop_static();
|
|
show_hide_all_static( 1 );
|
|
common_scripts\utility::waitframe();
|
|
stopcinematicingame();
|
|
wait 0.5;
|
|
level thread play_cinematic_thread_once( "loki_rog_intro_rebooting", "player_rog_screen_wait", 7300 );
|
|
thread maps\loki_audio::sfx_laptop_reboot();
|
|
level waittill( "player_rog_screen_wait" );
|
|
thread maps\loki_audio::sfx_laptop_static();
|
|
show_hide_all_static( 1 );
|
|
common_scripts\utility::waitframe();
|
|
stopcinematicingame();
|
|
common_scripts\utility::waitframe();
|
|
level thread play_cinematic_thread( "loki_rog_intro_target_locked", "player_rog_screen_fire" );
|
|
thread maps\loki_audio::sfx_laptop_target_lp();
|
|
level waittill( "player_rog_screen_fire" );
|
|
wait 3.75;
|
|
thread maps\loki_audio::sfx_laptop_static();
|
|
show_hide_all_static( 1 );
|
|
common_scripts\utility::waitframe();
|
|
stopcinematicingame();
|
|
common_scripts\utility::waitframe();
|
|
level thread play_cinematic_thread( "loki_rog_intro_launching_missiles", "player_rog_screen_zoom" );
|
|
thread maps\loki_audio::sfx_laptop_launching();
|
|
level waittill( "player_rog_screen_zoom" );
|
|
thread maps\loki_audio::sfx_laptop_static();
|
|
show_hide_all_static( 1 );
|
|
common_scripts\utility::waitframe();
|
|
stopcinematicingame();
|
|
common_scripts\utility::waitframe();
|
|
setsaveddvar( "cg_cinematicCanPause", "1" );
|
|
level thread play_cinematic_thread( "loki_rog_intro_connecting", "end_connection" );
|
|
thread maps\loki_audio::sfx_laptop_connecting();
|
|
}
|
|
|
|
play_cinematic_thread( var_0, var_1 )
|
|
{
|
|
level endon( var_1 );
|
|
cinematicingameloopresident( var_0 );
|
|
var_2 = 0;
|
|
|
|
while ( !iscinematicloaded() || !iscinematicplaying() )
|
|
{
|
|
var_2++;
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
wait 0.1;
|
|
show_hide_all_static( 0 );
|
|
}
|
|
|
|
play_cinematic_thread_once( var_0, var_1, var_2 )
|
|
{
|
|
level endon( var_1 );
|
|
cinematicingame( var_0 );
|
|
var_3 = 0;
|
|
|
|
while ( !iscinematicloaded() || !iscinematicplaying() )
|
|
{
|
|
var_3++;
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
wait 0.1;
|
|
show_hide_all_static( 0 );
|
|
|
|
while ( cinematicgettimeinmsec() < var_2 )
|
|
common_scripts\utility::waitframe();
|
|
|
|
level notify( var_1 );
|
|
}
|
|
|
|
show_hide_all_static( var_0 )
|
|
{
|
|
var_1 = getentarray( "ambush_breach_monitor_screen_static", "script_noteworthy" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( var_0 )
|
|
{
|
|
var_3 show();
|
|
continue;
|
|
}
|
|
|
|
var_3 hide();
|
|
}
|
|
}
|
|
|
|
start_rog_fail_timer( var_0 )
|
|
{
|
|
wait( var_0 );
|
|
|
|
if ( !common_scripts\utility::flag( "rog_intro_player_flipped_switch" ) )
|
|
{
|
|
setdvar( "ui_deadquote", &"LOKI_ENDING_FAIL" );
|
|
level thread maps\_utility::missionfailedwrapper();
|
|
}
|
|
}
|
|
|
|
delete_all_ents()
|
|
{
|
|
var_0 = getent( "intelligence_item", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
var_0 notify( "end_loop_thread" );
|
|
var_0 notify( "end_trigger_thread" );
|
|
}
|
|
|
|
if ( !isdefined( level.breach_anim_node ) )
|
|
maps\loki_space_breach::create_anim_node();
|
|
|
|
var_1 = 0;
|
|
var_2 = getentarray();
|
|
wait 0.2;
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
if ( isdefined( var_4.origin ) && var_4.origin[2] > 55000 && var_4.origin[0] > -76000 )
|
|
{
|
|
if ( isai( var_4 ) )
|
|
var_4 kill();
|
|
}
|
|
|
|
if ( isdefined( var_4.origin ) && var_4.origin[2] > 55000 && var_4.origin[2] < 92300 )
|
|
{
|
|
if ( !isdefined( var_4.model ) || var_4.model != "loki_rog_satellite_close" )
|
|
{
|
|
if ( isai( var_4 ) )
|
|
var_4 kill();
|
|
}
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
common_scripts\utility::waitframe();
|
|
var_2 = getentarray();
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
if ( var_1 < 100 )
|
|
{
|
|
if ( isdefined( var_4.origin ) && var_4.origin[2] > 55000 && var_4.origin[0] > -76000 )
|
|
{
|
|
if ( !isai( var_4 ) )
|
|
{
|
|
var_4 delete();
|
|
var_1++;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_4.origin ) && var_4.origin[2] > 55000 && var_4.origin[2] < 92300 )
|
|
{
|
|
if ( !isdefined( var_4.model ) || var_4.model != "loki_rog_satellite_close" )
|
|
{
|
|
if ( !isai( var_4 ) )
|
|
{
|
|
var_4 delete();
|
|
var_1++;
|
|
}
|
|
}
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
common_scripts\utility::waitframe();
|
|
var_1 = 0;
|
|
}
|
|
|
|
var_2 = getentarray();
|
|
}
|
|
|
|
enable_weapons()
|
|
{
|
|
level.player enableweapons();
|
|
}
|
|
|
|
console_hint_button_press()
|
|
{
|
|
return !common_scripts\utility::flag( "activate_console_hint" );
|
|
}
|
|
|
|
console_hint_button_press_pc()
|
|
{
|
|
return !common_scripts\utility::flag( "activate_console_hint_pc" );
|
|
}
|
|
|
|
fire_hint_button_press()
|
|
{
|
|
return !common_scripts\utility::flag( "press_to_fire" );
|
|
}
|
|
|
|
cleanup_layout( var_0 )
|
|
{
|
|
|
|
}
|
|
|
|
rog_target_spawn_logic()
|
|
{
|
|
var_0 = getentarray( "large_target_markers", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_missile_launcher_area_01", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_spaceport_01", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_dish_field_01", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_dish_field_02", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_dish_field_03", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_retreating_allies03", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_retreating_allies04", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
thread script_retreating_allies04_firing();
|
|
var_0 = getentarray( "targets_airfield_allies_moving_01", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_airfield_allies_static_01", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_airfield_allies_west_firing01", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_airfield_allies_north_firing01", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_airfield_allies_north_firing02", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
common_scripts\utility::flag_wait( "ROG_look_at_sat_farm" );
|
|
common_scripts\utility::flag_wait( "ROG_look_at_airfield" );
|
|
thread script_airfield_allies_west_firing01();
|
|
thread script_airfield_allies_north_firing01();
|
|
thread script_airfield_allies_north_firing02();
|
|
var_0 = getentarray( "targets_airfield_west", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_airfield_north_01", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
var_0 = getentarray( "targets_airfield_north_02", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rog_target_create_model_logic, "rog_done" );
|
|
}
|
|
|
|
script_retreating_allies04_firing()
|
|
{
|
|
level endon( "ROG_look_at_airfield" );
|
|
wait 33;
|
|
|
|
for ( var_0 = 0; var_0 < 4; var_0++ )
|
|
{
|
|
var_1 = randomint( 3 );
|
|
var_2 = getentarray( "targets_retreating_allies04_model", "targetname" );
|
|
|
|
if ( var_1 == 0 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( -17315, -12647, -127565 ) );
|
|
}
|
|
else if ( var_1 == 1 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( -5171, -7815, -127565 ) );
|
|
}
|
|
else if ( var_1 == 2 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( -2531, -12535, -127565 ) );
|
|
}
|
|
|
|
wait( randomfloatrange( 10.0, 15.0 ) );
|
|
}
|
|
}
|
|
|
|
script_airfield_allies_west_firing01()
|
|
{
|
|
for ( var_0 = 0; var_0 < 4; var_0++ )
|
|
{
|
|
var_1 = randomint( 3 );
|
|
var_2 = getentarray( "targets_airfield_allies_west_firing01_model", "targetname" );
|
|
|
|
if ( var_1 == 0 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( -27907, 13705, -127565 ) );
|
|
}
|
|
else if ( var_1 == 1 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( -24515, 8857, -127565 ) );
|
|
}
|
|
else if ( var_1 == 2 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( -30675, 6313, -127565 ) );
|
|
}
|
|
|
|
wait( randomfloatrange( 10.0, 15.0 ) );
|
|
}
|
|
}
|
|
|
|
script_airfield_allies_north_firing01()
|
|
{
|
|
for ( var_0 = 0; var_0 < 4; var_0++ )
|
|
{
|
|
var_1 = randomint( 3 );
|
|
var_2 = getentarray( "targets_airfield_allies_north_firing01_model", "targetname" );
|
|
|
|
if ( var_1 == 0 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( -16963, 20105, -127565 ) );
|
|
}
|
|
else if ( var_1 == 1 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( -15011, 24633, -127565 ) );
|
|
}
|
|
else if ( var_1 == 2 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( -9859, 20857, -127565 ) );
|
|
}
|
|
|
|
wait( randomfloatrange( 10.0, 15.0 ) );
|
|
}
|
|
}
|
|
|
|
script_airfield_allies_north_firing02()
|
|
{
|
|
for ( var_0 = 0; var_0 < 4; var_0++ )
|
|
{
|
|
var_1 = randomint( 3 );
|
|
var_2 = getentarray( "targets_airfield_allies_north_firing02_model", "targetname" );
|
|
|
|
if ( var_1 == 0 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( -1827, 21161, -127565 ) );
|
|
}
|
|
else if ( var_1 == 1 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( 2413, 22585, -127565 ) );
|
|
}
|
|
else if ( var_1 == 2 )
|
|
{
|
|
foreach ( var_4 in var_2 )
|
|
var_4 notify( "update_firing_position", ( 5661, 21369, -127565 ) );
|
|
}
|
|
|
|
wait( randomfloatrange( 10.0, 15.0 ) );
|
|
}
|
|
}
|
|
|
|
rog_target_create_model_logic( var_0, var_1 )
|
|
{
|
|
var_2 = spawn( "script_model", self.origin );
|
|
var_2.angles = self.angles;
|
|
var_2 setmodel( self.model );
|
|
var_2.script_team = self.script_team;
|
|
var_2.targetname = self.targetname + "_model";
|
|
|
|
if ( isdefined( self.target ) )
|
|
{
|
|
var_2.target = self.target;
|
|
var_2 thread rog_target_move_along_path();
|
|
}
|
|
|
|
if ( isdefined( self.script_deathtime ) )
|
|
{
|
|
var_2.script_deathtime = self.script_deathtime;
|
|
var_2 thread rog_target_deathtimer();
|
|
}
|
|
|
|
if ( isdefined( self.script_noteworthy ) )
|
|
var_2.script_noteworthy = self.script_noteworthy;
|
|
|
|
var_2 thread rog_target_hud_logic( var_2, "ROG_reveal_allies" );
|
|
var_2 thread rog_target_firing_logic( var_1 );
|
|
var_2 thread rog_target_handle_explosions();
|
|
var_2 thread rog_target_cleanup( var_0 );
|
|
level.rog_target_models[level.rog_target_models.size] = var_2;
|
|
self delete();
|
|
}
|
|
|
|
rog_target_cleanup( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = "rog_done";
|
|
|
|
self endon( "death" );
|
|
common_scripts\utility::flag_wait( "ROG_take_in_destruction" );
|
|
|
|
if ( "allies" != self.script_team )
|
|
childthread rog_target_cleaned_up_by_allies();
|
|
|
|
common_scripts\utility::flag_wait( var_0 );
|
|
rog_target_overkill_death( 1, 0 );
|
|
}
|
|
|
|
rog_target_cleaned_up_by_allies()
|
|
{
|
|
wait( randomfloatrange( 0.0, 20.0 ) );
|
|
rog_target_normal_death( 1 );
|
|
}
|
|
|
|
rog_target_handle_explosions()
|
|
{
|
|
self endon( "death" );
|
|
self.is_dead = 0;
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "rog_explosion", var_0, var_1 );
|
|
|
|
if ( maps\_vehicle::isvehicle() )
|
|
{
|
|
if ( maps\_vehicle::ishelicopter() && var_1 == "rod" )
|
|
{
|
|
var_2 = anglestoforward( self.angles );
|
|
var_3 = self.origin + var_2 * 6144;
|
|
var_4 = distance2d( var_3, var_0 );
|
|
var_5 = get_explosion_radius();
|
|
|
|
if ( var_4 < var_5 )
|
|
{
|
|
self notify( "newpath" );
|
|
var_6 = vectornormalize( self.origin - var_0 );
|
|
var_7 = self.origin + 2045 * var_6;
|
|
self vehicle_helisetai( var_7, 65, 10, 15, 0, ( 0, 0, 0 ), 0, 0.0, 0, 0, 0, 0, 0 );
|
|
}
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
switch ( var_1 )
|
|
{
|
|
case "rod":
|
|
childthread rog_target_handle_rod_impact( var_0 );
|
|
break;
|
|
case "missile":
|
|
case "tank":
|
|
childthread rog_target_handle_enemy_fire( var_0, var_1 );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
rog_target_handle_rod_impact( var_0 )
|
|
{
|
|
var_1 = self.origin - var_0;
|
|
var_2 = length( var_1 );
|
|
var_3 = get_explosion_radius();
|
|
var_4 = [ level.rog_fx_delay, 0.2, 0.3, 0.4 ];
|
|
var_5 = [ 0.4, 0.7, 0.9, 1.0 ];
|
|
|
|
for ( var_6 = 0; var_6 < var_5.size; var_6++ )
|
|
{
|
|
wait( var_4[var_6] );
|
|
|
|
if ( var_2 < var_3 * var_5[var_6] )
|
|
{
|
|
if ( self.script_team == "allies" )
|
|
level.rog_pass_fail["allies"]["targets"]++;
|
|
else if ( !self.is_dead )
|
|
level.rog_num_enemy_targets_killed++;
|
|
|
|
if ( var_6 < 2 )
|
|
thread rog_target_overkill_death( 0, 0 );
|
|
else if ( !self.is_dead )
|
|
{
|
|
self.is_dead = 1;
|
|
thread rog_target_normal_death( 0, self.origin - ( var_0 - ( 0, 0, 384 ) ) );
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
rog_vehicle_handle_rod_impact( var_0 )
|
|
{
|
|
var_1 = get_explosion_radius();
|
|
var_2 = [ 0.3, 0.4, 0.5, 0.6 ];
|
|
var_3 = [ 0.4, 0.7, 0.9, 1.0 ];
|
|
|
|
for ( var_4 = 0; var_4 < var_3.size; var_4++ )
|
|
{
|
|
wait( var_2[var_4] );
|
|
var_5 = length( self.origin - var_0 );
|
|
|
|
if ( var_5 < var_1 * var_3[var_4] )
|
|
{
|
|
if ( var_4 < 1 )
|
|
childthread vehicle_overkill_from_rog();
|
|
else
|
|
childthread vehicle_blow_up_from_rog();
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
rog_target_handle_enemy_fire( var_0, var_1 )
|
|
{
|
|
var_2 = self.origin - var_0;
|
|
var_3 = length( var_2 );
|
|
var_4 = level.rog_explosion_radius[var_1];
|
|
|
|
if ( var_3 < var_4 )
|
|
rog_target_normal_death( 1 );
|
|
}
|
|
|
|
rog_target_move_along_path()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "husk" );
|
|
self endon( "stop_pathing" );
|
|
var_0 = getvehiclenode( self.target, "targetname" );
|
|
var_1 = undefined;
|
|
|
|
if ( isdefined( var_0.target ) )
|
|
var_1 = getvehiclenode( var_0.target, "targetname" );
|
|
|
|
var_2 = var_0.speed;
|
|
|
|
while ( isdefined( var_0 ) )
|
|
{
|
|
var_3 = distance( self.origin, var_0.origin );
|
|
var_4 = var_3 / var_2;
|
|
self moveto( var_0.origin, var_4 );
|
|
|
|
if ( "allies" != self.script_team )
|
|
thread rog_target_interupt_path( var_0.origin );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
wait( var_4 * 0.8 );
|
|
self rotateto( vectortoangles( var_1.origin - var_0.origin ), var_4 * 0.4 );
|
|
wait( var_4 * 0.2 );
|
|
}
|
|
else
|
|
wait( var_4 );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_0 = var_1;
|
|
|
|
if ( isdefined( var_1.target ) )
|
|
var_1 = getvehiclenode( var_1.target, "targetname" );
|
|
else
|
|
var_1 = undefined;
|
|
|
|
continue;
|
|
}
|
|
|
|
var_0 = undefined;
|
|
}
|
|
}
|
|
|
|
rog_target_interupt_path( var_0 )
|
|
{
|
|
self notify( "ROG_target_interupt_path" );
|
|
self endon( "ROG_target_interupt_path" );
|
|
self endon( "death" );
|
|
self endon( "husk" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "rog_explosion", var_1, var_2 );
|
|
|
|
if ( var_2 == "rod" )
|
|
{
|
|
var_3 = vectornormalize( var_0 - self.origin );
|
|
var_4 = vectornormalize( var_1 - self.origin );
|
|
var_5 = vectordot( var_3, var_4 );
|
|
|
|
if ( var_5 > 0.5 )
|
|
{
|
|
var_6 = length( var_0 - var_1 );
|
|
|
|
if ( level.rog_explosion_radius["rod"] > var_6 )
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
self notify( "stop_pathing" );
|
|
|
|
if ( self.model == "vehicle_battle_hind_low" && var_6 < level.rog_explosion_radius["danger_close"] )
|
|
{
|
|
var_7 = vectornormalize( var_1 - self.origin );
|
|
self moveto( self.origin + var_7 * 2048, 10, 4, 3 );
|
|
}
|
|
else
|
|
self moveto( self.origin, 0.05 );
|
|
|
|
self notify( "stop_pathing" );
|
|
}
|
|
|
|
rog_target_firing_logic( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "husk" );
|
|
self.firing_position = var_0;
|
|
childthread rog_target_update_firing_position();
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( self.firing_position ) )
|
|
{
|
|
switch ( self.model )
|
|
{
|
|
case "vehicle_m1a2_abrams_iw6_low":
|
|
case "vehicle_t90ms_tank_iw6_low":
|
|
wait( randomfloatrange( 7, 15 ) );
|
|
|
|
if ( isdefined( self.firing_position ) )
|
|
{
|
|
var_1 = vectornormalize( self.firing_position - self.origin );
|
|
playfx( level._effect["abrams_flash_wv_no_tracer"], self.origin + ( 0, 0, 68 ) + 246 * var_1, var_1, ( 0, 0, 1 ) );
|
|
var_2 = self.firing_position + ( randomfloatrange( -1024, 1024 ), randomfloatrange( -1024, 1024 ), 0 );
|
|
playfx( level._effect["tank_blast_sand"], var_2 );
|
|
level notify( "rog_explosion", var_2, "tank" );
|
|
}
|
|
|
|
break;
|
|
case "vehicle_m880_launcher_low":
|
|
wait( randomfloatrange( 0.0, 2.0 ) );
|
|
|
|
if ( isdefined( self.firing_position ) )
|
|
{
|
|
var_2 = self.firing_position + ( randomfloatrange( -3072, 3072 ), randomfloatrange( -3072, 3072 ), 0 );
|
|
var_1 = vectornormalize( self.firing_position - self.origin );
|
|
playfx( level._effect["abrams_flash_wv_no_tracer"], self.origin + ( 0, 0, 68 ) + 246 * var_1, var_1, ( 0, 0, 1 ) );
|
|
thread missile_truck_fire_missile( var_2 );
|
|
self.firing_position = undefined;
|
|
}
|
|
|
|
break;
|
|
case "vehicle_mig29":
|
|
case "vehicle_battle_hind_low":
|
|
wait( randomfloatrange( 7.0, 15 ) );
|
|
|
|
if ( isdefined( self.firing_position ) )
|
|
{
|
|
var_2 = self.firing_position + ( randomfloatrange( -1024, 1024 ), randomfloatrange( -1024, 1024 ), 0 );
|
|
rog_target_launch_missile( var_2 );
|
|
}
|
|
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
self waittill( "update_firing_position" );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
rog_target_update_firing_position()
|
|
{
|
|
for (;;)
|
|
{
|
|
self waittill( "update_firing_position", var_0 );
|
|
self.firing_position = var_0;
|
|
}
|
|
}
|
|
|
|
rog_target_launch_missile( var_0 )
|
|
{
|
|
var_1 = spawn( "script_model", self.origin );
|
|
var_1.angles = self.angles;
|
|
var_1 setmodel( "projectile_sidewinder_missile" );
|
|
playfxontag( level._effect["missile_trail"], var_1, "tag_fx" );
|
|
var_2 = length( var_0 - var_1.origin ) / 2500;
|
|
var_1 moveto( var_0, var_2, var_2 * 0.2 );
|
|
wait( var_2 );
|
|
level notify( "rog_explosion", var_0, "missile" );
|
|
var_1 delete();
|
|
}
|
|
|
|
rog_target_deathtimer()
|
|
{
|
|
self endon( "death" );
|
|
wait( self.script_deathtime );
|
|
thread rog_target_normal_death( 1 );
|
|
}
|
|
|
|
rog_target_normal_death( var_0, var_1 )
|
|
{
|
|
if ( self.script_team == "allies" && !var_0 )
|
|
level notify( "ally_hit" );
|
|
|
|
self notify( "stop_pathing" );
|
|
self moveto( self.origin, 0.05 );
|
|
|
|
if ( !var_0 )
|
|
thread rog_target_get_thrown( var_1 );
|
|
|
|
rog_target_remove_hud_element( var_0 == 0 );
|
|
self notify( "husk" );
|
|
|
|
switch ( self.model )
|
|
{
|
|
case "vehicle_m1a2_abrams_iw6_low":
|
|
case "vehicle_t90ms_tank_iw6_low":
|
|
self setmodel( "vehicle_t90ms_tank_destroyed_iw6_low" );
|
|
|
|
if ( var_0 )
|
|
playfxontag( level._effect["target_explosion_tank"], self, "TAG_DEATHFX" );
|
|
|
|
break;
|
|
case "vehicle_sa6_static_desert":
|
|
case "vehicle_m880_launcher_low":
|
|
self setmodel( "vehicle_m880_launcher_destroyed_low" );
|
|
|
|
if ( var_0 )
|
|
playfx( level._effect["target_explosion_tank"], self.origin + ( 0, 0, 64 ) );
|
|
|
|
break;
|
|
case "vehicle_mig29":
|
|
playfxontag( level._effect["target_explosion_tank"], self, "TAG_DEATHFX" );
|
|
wait 0.3;
|
|
rog_target_overkill_death( 0, 1 );
|
|
break;
|
|
case "vehicle_battle_hind_low":
|
|
self setmodel( "vehicle_battle_hind_destroyed" );
|
|
playfxontag( level._effect["target_explosion_tank"], self, "tag_origin" );
|
|
wait 0.3;
|
|
rog_target_overkill_death( 0, 1 );
|
|
break;
|
|
}
|
|
}
|
|
|
|
rog_target_overkill_death( var_0, var_1 )
|
|
{
|
|
if ( self.script_team == "allies" && !var_0 )
|
|
level notify( "ally_hit" );
|
|
|
|
if ( var_1 )
|
|
playfx( level._effect["target_explosion_tank"], self.origin + ( 0, 0, 64 ) );
|
|
|
|
rog_target_remove_hud_element( var_0 == 0 );
|
|
self delete();
|
|
}
|
|
|
|
rog_target_get_thrown( var_0 )
|
|
{
|
|
if ( !isdefined( level.rog_fired_targ ) )
|
|
level.rog_fired_targ = ( 0, 0, 0 );
|
|
|
|
var_1 = self.origin - level.rog_fired_targ;
|
|
var_1 = ( var_1[0], var_1[1], 0 );
|
|
var_2 = vectornormalize( var_1 ) * randomfloatrange( 500, 900 ) * randomintrange( 1, 3 ) + self.origin;
|
|
var_3 = ( 0, randomintrange( -179, 179 ) * randomintrange( 1, 3 ), 0 );
|
|
self moveto( var_2, 3.0, 0.0, 1.5 );
|
|
self rotateby( var_3, 3.0, 0.0, 1.0 );
|
|
}
|
|
|
|
rog_target_hud_logic( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "husk" );
|
|
|
|
if ( self.script_team == "allies" )
|
|
{
|
|
level waittill( var_1 );
|
|
maps\_utility::delaythread( randomfloatrange( 0.0, 1.5 ), ::rog_target_add_hud_element );
|
|
}
|
|
else
|
|
{
|
|
var_2 = 0;
|
|
var_3 = randomfloatrange( 0.0, 1.5 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( !var_2 )
|
|
{
|
|
if ( var_0 istouching( level.rog_active_visibilty_volume ) )
|
|
{
|
|
childthread rog_target_add_hud_element( var_3 );
|
|
var_2 = 1;
|
|
}
|
|
}
|
|
else if ( !var_0 istouching( level.rog_active_visibilty_volume ) )
|
|
{
|
|
maps\_utility::delaythread( var_3, ::rog_target_remove_hud_element );
|
|
var_2 = 0;
|
|
}
|
|
|
|
wait 0.5;
|
|
}
|
|
}
|
|
}
|
|
|
|
rog_target_add_hud_element( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
wait( var_0 );
|
|
|
|
var_1 = undefined;
|
|
|
|
if ( isdefined( self.script_noteworthy ) )
|
|
{
|
|
switch ( self.script_noteworthy )
|
|
{
|
|
case "large_target":
|
|
var_1 = common_scripts\utility::ter_op( self.script_team == "allies", "hud_rog_target_big_g", "hud_rog_target_big_r" );
|
|
|
|
if ( self.script_team == "axis" )
|
|
level.rog_pass_fail["axis"]["targets"]++;
|
|
|
|
break;
|
|
case "vehicle":
|
|
var_1 = common_scripts\utility::ter_op( self.script_team == "allies", "hud_rog_target_g", "hud_rog_target_r" );
|
|
break;
|
|
case "jet":
|
|
var_1 = common_scripts\utility::ter_op( self.script_team == "allies", "hud_rog_target_vehicle_b_g", "hud_rog_target_vehicle_b_r" );
|
|
break;
|
|
default:
|
|
var_1 = common_scripts\utility::ter_op( self.script_team == "allies", "hud_rog_target_g", "hud_rog_target_r" );
|
|
}
|
|
}
|
|
else
|
|
var_1 = common_scripts\utility::ter_op( self.script_team == "allies", "hud_rog_target_g", "hud_rog_target_r" );
|
|
|
|
var_2 = newhudelem();
|
|
var_2.x = 0;
|
|
var_2.y = 0;
|
|
var_2.alignx = "center";
|
|
var_2.aligny = "middle";
|
|
var_2.horzalign = "center";
|
|
var_2.vertalign = "middle";
|
|
var_2.alpha = 1.0;
|
|
var_2 setshader( var_1, 8, 8 );
|
|
level.current_target_hud_count++;
|
|
|
|
if ( level.current_target_hud_count >= level.rog_max_waypoints )
|
|
{
|
|
|
|
}
|
|
|
|
var_2 settargetent( self );
|
|
var_2 setwaypoint( 1 );
|
|
level notify( "target_reveal" );
|
|
|
|
if ( self.script_team == "axis" )
|
|
self hudoutlineenable( common_scripts\utility::ter_op( self.script_team == "allies", 3, 4 ), 0 );
|
|
|
|
self.hud_element = var_2;
|
|
}
|
|
|
|
rog_target_remove_hud_element( var_0 )
|
|
{
|
|
if ( isdefined( self.hud_element ) )
|
|
{
|
|
if ( isdefined( var_0 ) && var_0 )
|
|
{
|
|
if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "large_target" && self.script_team == "axis" )
|
|
level.rog_pass_fail["axis"]["targets"]--;
|
|
}
|
|
|
|
self.hud_element destroy();
|
|
self.hud_element = undefined;
|
|
level.current_target_hud_count--;
|
|
}
|
|
|
|
if ( isdefined( self ) )
|
|
self hudoutlinedisable();
|
|
}
|
|
|
|
rog_target_vehicle_tracking()
|
|
{
|
|
var_0 = spawn( "script_origin", self.origin );
|
|
var_0 linkto( self );
|
|
var_0.script_team = self.script_team;
|
|
thread rog_target_hud_logic( var_0, "ROG_reveal_allies" );
|
|
self waittill( "death" );
|
|
var_0 delete();
|
|
}
|
|
|
|
rog_logic()
|
|
{
|
|
level thread transition_static( 2.0, 1 );
|
|
common_scripts\utility::flag_set( "turn_off_rogs" );
|
|
space_cleanup();
|
|
level notify( "kill_thrusters" );
|
|
rog_init();
|
|
level thread rog_check_progress();
|
|
level thread rog_mission_dialogue();
|
|
level thread rog_card_swap();
|
|
level thread rog_running_cleanup();
|
|
level thread rog_target_spawn_logic();
|
|
level thread rog_mechanics();
|
|
level.player thread rog_attach_to_firing_position();
|
|
level.player thread rog_ambiant_battle_chatter();
|
|
level.player thread rog_check_friendly_fire();
|
|
}
|
|
|
|
black_fade( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = maps\_hud_util::create_client_overlay( "black", 0, level.player );
|
|
|
|
if ( var_0 > 0 )
|
|
var_3 fadeovertime( var_0 );
|
|
|
|
var_3.alpha = 1;
|
|
wait( var_0 );
|
|
wait( var_1 );
|
|
|
|
if ( var_2 > 0 )
|
|
var_3 fadeovertime( var_2 );
|
|
|
|
var_3.alpha = 0;
|
|
wait( var_2 );
|
|
var_3 destroy();
|
|
}
|
|
|
|
check_anim_time( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = self getanimtime( level.scr_anim[var_0][var_1] );
|
|
|
|
if ( var_3 >= var_2 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
rog_targeting_logic()
|
|
{
|
|
level endon( "ROG_passed" );
|
|
var_0 = 1;
|
|
level childthread rog_move_aoe_target();
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = level.player geteye();
|
|
var_2 = level.player getplayerangles();
|
|
var_3 = anglestoforward( var_2 );
|
|
|
|
if ( level.player attackbuttonpressed() )
|
|
{
|
|
if ( var_0 && common_scripts\utility::flag( "ROG_can_fire" ) && !common_scripts\utility::flag( "ROG_is_cooling_down" ) )
|
|
{
|
|
var_0 = 0;
|
|
var_4 = bullettrace( var_1, var_1 + var_3 * 250000, 0, level.uav_model, 0 );
|
|
level thread rog_fire_single_new( var_4["position"] );
|
|
common_scripts\utility::flag_set( "player_is_firing" );
|
|
level notify( "ROG_locked_in" );
|
|
}
|
|
}
|
|
else
|
|
var_0 = 1;
|
|
|
|
wait( level.timestep );
|
|
}
|
|
}
|
|
|
|
rog_fire_single_new( var_0 )
|
|
{
|
|
level notify( "ROG_fired", var_0 );
|
|
level.rog_fired_targ = var_0;
|
|
var_1 = maps\_utility::spawn_anim_model( "loki_rog_single", level.player_mover );
|
|
level.player playsound( "scn_loki_rog_press_trigger" );
|
|
var_1 playsound( "scn_loki_rog_reentry" );
|
|
playfxontag( level._effect["ROG_single_geotrail"], var_1, "tag_origin" );
|
|
level thread rog_rechamber_logic();
|
|
var_2 = rog_get_next_target_marker();
|
|
var_2 thread rog_show_target_marker();
|
|
var_3 = ( 0, 0, 0 );
|
|
var_4 = level.rog_single_velocity_max * level.rog_single_velocity_max * level.timestep * level.timestep + 100;
|
|
var_5 = abs( var_3[0] );
|
|
var_6 = abs( var_3[1] );
|
|
var_7 = abs( var_3[2] );
|
|
var_8 = lengthsquared( var_0 - var_1.origin );
|
|
level thread rog_increment_active_strikes();
|
|
wait( randomfloatrange( 0.05, 1.5 ) );
|
|
thread maps\loki_audio::sfx_rog_incoming( var_1 );
|
|
|
|
for (;;)
|
|
{
|
|
var_5 = var_5 + level.rog_single_acceleration * level.timestep;
|
|
var_6 = var_6 + level.rog_single_acceleration * level.timestep;
|
|
var_7 = var_7 + level.rog_single_acceleration * level.timestep;
|
|
|
|
if ( var_7 > level.rog_single_velocity_max )
|
|
var_7 = level.rog_single_velocity_max;
|
|
|
|
var_9 = lengthsquared( var_0 - var_1.origin );
|
|
var_10 = 1.0 - var_9 / var_8;
|
|
var_11 = vectornormalize( var_0 - var_1.origin );
|
|
var_11 = ( var_11[0] * var_10, var_11[1] * var_10, var_11[2] );
|
|
var_12 = var_11[0] * var_5 * level.timestep;
|
|
var_13 = var_11[1] * var_6 * level.timestep;
|
|
var_14 = var_11[2] * var_7 * level.timestep;
|
|
var_15 = ( var_12, var_13, var_14 );
|
|
var_1.origin = var_1.origin + var_15;
|
|
|
|
if ( lengthsquared( var_0 - var_1.origin ) < var_4 )
|
|
{
|
|
stopfxontag( level._effect["ROG_single_geotrail"], var_1, "tag_origin" );
|
|
var_1.origin = var_0;
|
|
level thread rog_impact_danger_close_check( var_0 );
|
|
var_2 maps\_utility::delaythread( level.rog_fx_delay, ::rog_hide_target_marker );
|
|
level thread rog_uav_explosion_effects( var_0 );
|
|
var_1 thread rog_explosion_fx();
|
|
var_1 thread rog_structure_destruction( var_0 );
|
|
var_1 thread rog_scriptable_radius_damage( var_0 );
|
|
level thread rog_check_train_track_damage( var_0 );
|
|
level thread rog_decrement_active_strikes();
|
|
break;
|
|
}
|
|
|
|
wait( level.timestep );
|
|
}
|
|
|
|
var_1 hide();
|
|
}
|
|
|
|
rog_increment_active_strikes()
|
|
{
|
|
level.rog_in_flight++;
|
|
level.rog_strike_active++;
|
|
}
|
|
|
|
rog_decrement_active_strikes()
|
|
{
|
|
level.rog_in_flight--;
|
|
wait 1.15;
|
|
level.rog_strike_active--;
|
|
}
|
|
|
|
rog_impact_danger_close_check( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
if ( isdefined( level.rog_train ) )
|
|
{
|
|
foreach ( var_3 in level.rog_train )
|
|
{
|
|
var_4 = distance2d( var_3.origin, var_0 );
|
|
|
|
if ( var_4 > get_explosion_radius() )
|
|
{
|
|
if ( level.rog_explosion_radius["danger_close"] > var_4 )
|
|
level notify( "danger_close_train" );
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( !common_scripts\utility::flag( "ROG_no_fail" ) )
|
|
{
|
|
setdvar( "ui_deadquote", &"LOKI_ROG_FAIL_FF" );
|
|
level thread maps\_utility::missionfailedwrapper();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( var_1 )
|
|
level notify( "danger_close" );
|
|
}
|
|
|
|
preimpactsmoke( var_0 )
|
|
{
|
|
if ( self.targetname == "destroy_spaceport" )
|
|
{
|
|
playfx( level._effect["loki_rog_spaceport_center_explosion"], self.origin + ( 0, 0, 8000 ), vectornormalize( self.origin - var_0 ), ( 0, 0, 1 ) );
|
|
wait 0.5;
|
|
self delete();
|
|
}
|
|
else
|
|
{
|
|
var_1 = 1000;
|
|
|
|
for ( var_2 = 0; var_2 < 2; var_2++ )
|
|
{
|
|
var_3 = ( randomintrange( -1 * var_1, var_1 ), randomintrange( -1 * var_1, var_1 ), randomintrange( -1 * var_1, var_1 ) );
|
|
playfx( level._effect["building_crumble_directional"], self.origin + var_3, vectornormalize( self.origin - var_0 ), ( 0, 0, 1 ) );
|
|
wait 0.5;
|
|
}
|
|
}
|
|
}
|
|
|
|
rog_get_next_target_marker()
|
|
{
|
|
var_0 = undefined;
|
|
|
|
for ( var_1 = 0; var_1 < level.rog_blast_markers.size; var_1++ )
|
|
{
|
|
if ( !isdefined( level.rog_blast_markers[var_1].time ) )
|
|
{
|
|
level.rog_blast_markers[var_1].time = gettime();
|
|
var_0 = level.rog_blast_markers[var_1];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
{
|
|
var_2 = level.rog_blast_markers[var_1].time;
|
|
|
|
for ( var_1 = 1; var_1 < level.rog_blast_markers.size; var_1++ )
|
|
{
|
|
if ( level.rog_blast_markers[var_1].time < var_2 )
|
|
var_2 = level.rog_blast_markers[var_1];
|
|
}
|
|
|
|
var_2.time = gettime();
|
|
var_0 = var_2;
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
rog_show_target_marker()
|
|
{
|
|
if ( !common_scripts\utility::flag( "final_descent_active" ) )
|
|
{
|
|
self.origin = level.rog_aoe_reticle.origin;
|
|
wait 0.05;
|
|
self solid();
|
|
self show();
|
|
self rotateyaw( 720, 14 );
|
|
}
|
|
}
|
|
|
|
rog_hide_target_marker()
|
|
{
|
|
self notsolid();
|
|
self hide();
|
|
self.time = undefined;
|
|
}
|
|
|
|
rog_target_marker_blink()
|
|
{
|
|
self hudoutlineenable( 4, 0 );
|
|
wait 0.75;
|
|
self hudoutlinedisable();
|
|
wait 0.75;
|
|
self hudoutlineenable( 4, 0 );
|
|
wait 0.75;
|
|
self hudoutlinedisable();
|
|
wait 0.75;
|
|
self hudoutlineenable( 4, 0 );
|
|
wait 0.75;
|
|
self hudoutlinedisable();
|
|
}
|
|
|
|
rog_rechamber_logic()
|
|
{
|
|
level endon( "ROG_take_in_destruction" );
|
|
common_scripts\utility::flag_set( "ROG_is_cooling_down" );
|
|
wait 1.3;
|
|
common_scripts\utility::flag_clear( "ROG_is_cooling_down" );
|
|
}
|
|
|
|
rog_mechanics()
|
|
{
|
|
level endon( "ROG_end" );
|
|
level childthread rog_targeting_logic();
|
|
level notify( "ROG_new_sequence" );
|
|
common_scripts\utility::flag_wait_or_timeout( "ROG_early_out", level.rog_full_sequence_max_time );
|
|
common_scripts\utility::flag_clear( "ROG_can_fire" );
|
|
level.player setclientomnvar( "ui_loki_rog_message_progress", 15.0 );
|
|
common_scripts\utility::flag_wait( "ROG_script_done" );
|
|
common_scripts\utility::flag_set( "rog_done" );
|
|
}
|
|
|
|
rog_adjust_firing_position()
|
|
{
|
|
var_0 = -15000.0 - level.player_mover[2];
|
|
level.player_mover = level.player_mover + ( 0, 0, var_0 );
|
|
}
|
|
|
|
rog_move_aoe_target()
|
|
{
|
|
level endon( "final_descent_active" );
|
|
level thread rog_aoe_reticle_visibility_logic();
|
|
var_0 = 74832.0;
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = level.player geteye();
|
|
var_1 = var_1 + ( 0, 0, var_0 );
|
|
var_2 = level.player getplayerangles();
|
|
var_3 = anglestoforward( var_2 );
|
|
var_4 = bullettrace( var_1, var_1 + var_3 * 250000, 0, level.uav_model, 1 );
|
|
level.rog_aoe_reticle.origin = ( var_4["position"][0], var_4["position"][1], level.rog_reticle_hieght );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
rog_adjust_aoe_target_height()
|
|
{
|
|
common_scripts\utility::flag_wait( "ROG_look_at_sat_farm" );
|
|
wait 3.5;
|
|
|
|
for (;;)
|
|
{
|
|
level.rog_reticle_hieght++;
|
|
|
|
if ( level.rog_reticle_hieght >= -127675 )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
rog_aoe_reticle_visibility_logic()
|
|
{
|
|
var_0 = 0;
|
|
|
|
while ( !common_scripts\utility::flag( "ROG_take_in_destruction" ) )
|
|
{
|
|
if ( !var_0 )
|
|
{
|
|
if ( common_scripts\utility::flag( "ROG_can_fire" ) )
|
|
{
|
|
rog_aoe_show_reticle();
|
|
var_0 = 1;
|
|
}
|
|
}
|
|
else if ( !common_scripts\utility::flag( "ROG_can_fire" ) )
|
|
{
|
|
rog_aoe_hide_reticle();
|
|
var_0 = 0;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
rog_aoe_hide_reticle();
|
|
}
|
|
|
|
rog_aoe_show_reticle()
|
|
{
|
|
level.rog_aoe_reticle show();
|
|
level.rog_aoe_reticle solid();
|
|
}
|
|
|
|
rog_aoe_hide_reticle()
|
|
{
|
|
level.rog_aoe_reticle hide();
|
|
level.rog_aoe_reticle notsolid();
|
|
}
|
|
|
|
rog_display_hint_strings()
|
|
{
|
|
if ( !common_scripts\utility::flag( "dont_show_pull_trigger_hint" ) )
|
|
level maps\_utility::delaythread( 0.5, maps\_utility::display_hint, "hint_launch_single_rod" );
|
|
}
|
|
|
|
rog_uav_camera_logic()
|
|
{
|
|
self endon( "death" );
|
|
setsaveddvar( "r_hudOutlineWidth", 1.0 );
|
|
common_scripts\utility::flag_set( "ROG_take_in_battle_scene" );
|
|
self vehicle_setspeedimmediate( 210, 20 );
|
|
wait 6.5;
|
|
self vehicle_setspeed( 90, 50, 25 );
|
|
wait 1.5;
|
|
common_scripts\utility::flag_set( "ROG_look_at_sat_farm" );
|
|
level thread rog_uav_update_lookat( 6.0 );
|
|
wait 6.0;
|
|
level thread rog_uav_update_lookat( 15.0 );
|
|
wait 11.0;
|
|
common_scripts\utility::flag_set( "rog_vo_0" );
|
|
wait 4.0;
|
|
common_scripts\utility::flag_set( "ROG_look_at_train" );
|
|
level thread rog_uav_update_lookat( 7.5 );
|
|
wait 7.5;
|
|
common_scripts\utility::flag_set( "ROG_look_at_main_base" );
|
|
level thread rog_uav_update_lookat( 18.0 );
|
|
wait 18.0;
|
|
level thread rog_uav_update_lookat( 17.0 );
|
|
wait 4.0;
|
|
common_scripts\utility::flag_set( "ROG_look_at_airfield" );
|
|
common_scripts\utility::flag_wait_or_timeout( "ROG_early_out", 22.0 );
|
|
common_scripts\utility::flag_set( "ROG_take_in_destruction" );
|
|
level thread rog_uav_update_lookat( 25.0 );
|
|
level notify( "final_clamp" );
|
|
setsaveddvar( "r_hudOutlineWidth", 2.0 );
|
|
}
|
|
|
|
rog_uav_clamp_logic()
|
|
{
|
|
self endon( "death" );
|
|
level.player lerpviewangleclamp( 0.05, 0.01, 0.01, 15, 15, 10, 10 );
|
|
wait 7.5;
|
|
level.player lerpviewangleclamp( 2.5, 0.2, 0.2, 20, 40, 2.5, 21 );
|
|
wait 4.0;
|
|
level.player lerpviewangleclamp( 5.0, 0.2, 0.2, 29, 75, 14, 19.5 );
|
|
wait 7.5;
|
|
level.player lerpviewangleclamp( 7.5, 0.2, 0.2, 38, 85, 12, 15 );
|
|
wait 9.0;
|
|
level.player lerpviewangleclamp( 10.0, 0.2, 0.2, 12, 3, 19, 5 );
|
|
wait 10.5;
|
|
level.player lerpviewangleclamp( 4.5, 0.2, 0.2, 30, 30, 11, 3 );
|
|
wait 4.5;
|
|
level.player lerpviewangleclamp( 4.2, 0.2, 0.2, 45, 33, 11, 14 );
|
|
wait 4.5;
|
|
level.player lerpviewangleclamp( 6.0, 0.2, 0.2, 45, 45, 10, 20 );
|
|
wait 12.0;
|
|
level.player lerpviewangleclamp( 5.0, 0.2, 0.2, 50, 50, 15, 25 );
|
|
wait 10.0;
|
|
level.player lerpviewangleclamp( 10.0, 0.2, 0.2, 50, 19, 15, 25 );
|
|
level waittill( "final_clamp" );
|
|
level.player lerpviewangleclamp( 6.0, 0.2, 0.2, 9, 9, 6, 6 );
|
|
}
|
|
|
|
rog_uav_explosion_effects( var_0 )
|
|
{
|
|
var_1 = distancesquared( var_0, level.uav.origin );
|
|
var_2 = int( var_1 / pow( 10, 8 ) );
|
|
var_3 = var_2 / 10;
|
|
|
|
if ( var_3 > 2 )
|
|
return;
|
|
else
|
|
{
|
|
var_4 = 0.0;
|
|
level thread rog_uav_initial_blur( 4 * var_3 );
|
|
wait( var_3 );
|
|
level.player playrumbleonentity( "grenade_rumble" );
|
|
|
|
if ( var_3 < 1.5 )
|
|
{
|
|
for ( var_5 = 0; var_5 < 6; var_5++ )
|
|
level thread maps\loki_rog_hud::uav_static_lines( 1 );
|
|
}
|
|
|
|
if ( var_3 < 1.0 )
|
|
{
|
|
for ( var_5 = 0; var_5 < 2; var_5++ )
|
|
level thread maps\loki_rog_hud::uav_static_lines( 1 );
|
|
|
|
level.player common_scripts\utility::delaycall( 0.5, ::playrumbleonentity, "grenade_rumble" );
|
|
var_4 = 2.6;
|
|
setblur( 4 * var_3, 0.05 );
|
|
}
|
|
|
|
if ( var_3 < 0.6 )
|
|
{
|
|
for ( var_5 = 0; var_5 < 3; var_5++ )
|
|
level thread maps\loki_rog_hud::uav_static_lines( 1 );
|
|
|
|
level maps\_utility::delaythread( 0.4, ::static_flash, 1 );
|
|
level.player common_scripts\utility::delaycall( 1.0, ::playrumbleonentity, "grenade_rumble" );
|
|
var_4 = 1.6;
|
|
setblur( 4 * var_3, 0.05 );
|
|
}
|
|
|
|
if ( 0.0 < var_4 )
|
|
{
|
|
level.player screenshakeonentity( 2, 1, 3, 2.5, 0, 2.5, 1000, 2, 1, 4, var_4 );
|
|
level thread uav_focus_recover();
|
|
}
|
|
}
|
|
}
|
|
|
|
uav_focus_recover()
|
|
{
|
|
level notify( "UAV_focus_recover" );
|
|
level endon( "UAV_focus_recover" );
|
|
wait 0.2;
|
|
setblur( 4, 0.25 );
|
|
wait 0.15;
|
|
setblur( 1, 0.5 );
|
|
wait 0.2;
|
|
setblur( 3, 0.5 );
|
|
wait 0.1;
|
|
setblur( 0, 0.25 );
|
|
}
|
|
|
|
rog_uav_initial_blur( var_0 )
|
|
{
|
|
setblur( var_0, 0.25 );
|
|
wait 0.5;
|
|
setblur( 0, 0.5 );
|
|
}
|
|
|
|
rog_tag_train()
|
|
{
|
|
var_0 = 4.5;
|
|
var_1 = 0.0;
|
|
|
|
for ( var_2 = 0; var_2 < 5; var_2++ )
|
|
{
|
|
foreach ( var_4 in level.rog_train )
|
|
var_4 hudoutlineenable( 3, 0 );
|
|
|
|
level.player playsound( "scn_loki_rog_target_on" );
|
|
wait 0.2;
|
|
|
|
foreach ( var_4 in level.rog_train )
|
|
var_4 hudoutlinedisable();
|
|
|
|
wait 0.25;
|
|
}
|
|
|
|
foreach ( var_4 in level.rog_train )
|
|
var_4 hudoutlineenable( 3, 0 );
|
|
|
|
var_10 = [];
|
|
level.rog_train[7].script_team = "allies";
|
|
var_10[var_10.size] = level.rog_train[7] thread rog_add_hud_element_on_target();
|
|
level.player playsound( "scn_loki_rog_target_on" );
|
|
common_scripts\utility::flag_wait( "ROG_look_at_main_base" );
|
|
wait 13.0;
|
|
|
|
foreach ( var_4 in level.rog_train )
|
|
var_4 hudoutlinedisable();
|
|
|
|
common_scripts\utility::flag_wait( "ROG_look_at_airfield" );
|
|
|
|
foreach ( var_14 in var_10 )
|
|
var_14 destroy();
|
|
}
|
|
|
|
rog_uav_update_lookat( var_0 )
|
|
{
|
|
level.rog_current_lookat_node_index++;
|
|
level.uav.target_ent moveto( level.rog_uav_lookat_pos[level.rog_current_lookat_node_index], var_0, 0.5 * var_0, 0.5 * var_0 );
|
|
}
|
|
|
|
rog_attach_to_firing_position()
|
|
{
|
|
level.player unlink();
|
|
level.player playersetgroundreferenceent( undefined );
|
|
rog_adjust_firing_position();
|
|
level.uav_defualt_fov = 55;
|
|
level.uav = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "uav_camera_spawner_new" );
|
|
level.uav_model.origin = level.uav.origin;
|
|
level.uav_model.angles = level.uav.angles;
|
|
level.uav_model linkto( level.uav );
|
|
level.uav uav_useby( level.player, level.rog_uav_lookat_pos[level.rog_current_lookat_node_index] );
|
|
level thread maps\loki_rog_hud::uav_static_lines( 0 );
|
|
level.uav thread rog_uav_camera_logic();
|
|
level.uav thread rog_uav_clamp_logic();
|
|
}
|
|
|
|
transition_static( var_0, var_1 )
|
|
{
|
|
wait( var_0 );
|
|
level thread static_flash( 1 );
|
|
level notify( "end_connection" );
|
|
setsaveddvar( "cg_cinematicCanPause", "0" );
|
|
|
|
if ( var_1 )
|
|
stopcinematicingame();
|
|
}
|
|
|
|
static_flash( var_0, var_1 )
|
|
{
|
|
var_2 = newhudelem();
|
|
var_2.hidewheninmenu = 0;
|
|
var_2.hidewhendead = 1;
|
|
var_2 setshader( "overlay_static", 640, 480 );
|
|
var_2.alignx = "left";
|
|
var_2.aligny = "top";
|
|
var_2.horzalign = "fullscreen";
|
|
var_2.vertalign = "fullscreen";
|
|
var_2.alpha = 0;
|
|
var_2.sort = 1;
|
|
|
|
for ( var_3 = 0; var_3 < var_0; var_3++ )
|
|
{
|
|
var_2.alpha = 1;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
level.player thread maps\_utility::play_sound_on_entity( var_1 );
|
|
|
|
wait 0.1;
|
|
var_2.alpha = 0;
|
|
wait 0.2;
|
|
}
|
|
|
|
var_2 destroy();
|
|
}
|
|
|
|
uav_useby( var_0, var_1 )
|
|
{
|
|
self.player = var_0;
|
|
self.view_controller = maps\_utility::get_player_view_controller( self, "tag_origin", ( 0, 0, -8 ), "player_view_controller" );
|
|
var_2 = self.origin + ( 0, 0, -1000 );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_2 = var_1;
|
|
|
|
self.target_ent = spawn( "script_origin", var_2 );
|
|
self.view_controller snaptotargetentity( self.target_ent );
|
|
var_0 unlink();
|
|
self.view_rig = uav_rig_controller( self.view_controller, "player_view_controller_loki" );
|
|
var_0 playerlinktodelta( self.view_controller, "tag_player", 0.85, 0, 0, 0, 0, 1 );
|
|
setsaveddvar( "sv_znear", 192 );
|
|
self.view_rig useby( var_0 );
|
|
level.player disableturretdismount();
|
|
level.player allowads( 0 );
|
|
level.player maps\_art::dof_disable_ads();
|
|
self hide();
|
|
self.view_rig setturretfov( level.uav_defualt_fov );
|
|
}
|
|
|
|
uav_rig_controller( var_0, var_1 )
|
|
{
|
|
var_2 = "tag_aim";
|
|
var_3 = var_0 gettagorigin( var_2 );
|
|
var_4 = var_0 gettagangles( var_2 );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = "player_view_controller";
|
|
|
|
var_5 = spawnturret( "misc_turret", var_3, var_1 );
|
|
var_5.angles = var_4;
|
|
var_5 setmodel( "tag_turret" );
|
|
var_5 linkto( var_0, var_2, ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_5 makeunusable();
|
|
var_5 hide();
|
|
var_5 setmode( "manual" );
|
|
var_5 turretfiredisable();
|
|
return var_5;
|
|
}
|
|
|
|
uav_cam_lookat( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
level.uav.view_controller cleartargetentity();
|
|
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
level.uav.target_ent.origin = var_0.origin;
|
|
level.uav.target_ent linkto( var_0 );
|
|
}
|
|
else
|
|
level.uav.target_ent.origin = var_0.origin;
|
|
|
|
level.uav.view_controller snaptotargetentity( level.uav.target_ent );
|
|
level.player lerpviewangleclamp( var_1, 0, 0, 0, 0, 0, 0 );
|
|
wait( var_1 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
thread lerp_turret_fov( var_3, var_1 );
|
|
wait( var_2 );
|
|
}
|
|
else
|
|
wait( var_2 );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
level.uav.target_ent unlink();
|
|
|
|
if ( isdefined( var_3 ) )
|
|
thread lerp_turret_fov( level.uav_defualt_fov, 0.5 );
|
|
|
|
level notify( "camera_release" );
|
|
level.player lerpviewangleclamp( 1, 0.5, 0.5, 45, 45, 45, 45 );
|
|
}
|
|
|
|
lerp_turret_fov( var_0, var_1 )
|
|
{
|
|
level.player lerpfov( var_0, var_1 );
|
|
level.uav.view_rig setturretfov( var_0 );
|
|
}
|
|
|
|
rog_getcirclepoints( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = 3.14159;
|
|
var_4 = 360 / var_0;
|
|
var_5 = [];
|
|
|
|
for ( var_6 = 0; var_6 < var_0; var_6++ )
|
|
{
|
|
var_7 = var_4 * var_6;
|
|
var_8 = var_2[0] + var_1 * cos( var_7 );
|
|
var_9 = var_2[1] + var_1 * sin( var_7 );
|
|
var_10 = ( var_8, var_9, var_2[2] );
|
|
var_5[var_5.size] = var_10;
|
|
}
|
|
|
|
return var_5;
|
|
}
|
|
|
|
rog_shockwave()
|
|
{
|
|
if ( !level.vfx_debug_do_shockwave )
|
|
return;
|
|
|
|
var_0 = 3.14159;
|
|
var_1 = var_0 * 2.0;
|
|
var_2 = level._effect["vfx_rog_impact_test"];
|
|
var_3 = self.origin;
|
|
var_4 = 600;
|
|
var_5 = 7;
|
|
var_6 = get_explosion_radius() / var_5 + 1;
|
|
|
|
for ( var_7 = 1; var_7 < var_5 + 1; var_7++ )
|
|
{
|
|
var_8 = var_7 * var_6;
|
|
var_9 = var_1 * var_8;
|
|
thread throw_rog_destruction( undefined, var_3, randomfloatrange( var_8 * 0.8, var_8 * 1.2 ) );
|
|
var_10 = floor( var_9 / var_4 + 0.5 );
|
|
var_11 = rog_getcirclepoints( var_10, var_7 * var_6, var_3 );
|
|
|
|
foreach ( var_13 in var_11 )
|
|
{
|
|
var_14 = vectornormalize( var_13 - var_3 );
|
|
var_15 = randomfloatrange( var_4 * -1.0, var_4 * 1.0 );
|
|
}
|
|
|
|
wait( level.rog_explosion_grow_time / var_5 );
|
|
}
|
|
}
|
|
|
|
rog_explosion_fx()
|
|
{
|
|
var_0 = get_explosion_radius() / level.rog_explosion_grow_time;
|
|
var_1 = self.origin;
|
|
thread update_scripted_explosion_point( var_1 );
|
|
var_2 = spawn( "script_model", var_1 );
|
|
var_2.angles = ( -90, 0, 0 );
|
|
var_2 setmodel( "tag_origin" );
|
|
var_3 = spawn( "script_model", var_1 );
|
|
var_3 setmodel( "tag_origin" );
|
|
level.crater_array = common_scripts\utility::add_to_array( level.crater_array, var_3 );
|
|
level.crater_array = common_scripts\utility::add_to_array( level.crater_array, var_2 );
|
|
thread maps\loki_audio::sfx_rog_impact( var_2 );
|
|
level notify( "rog_explosion", var_1, "rod" );
|
|
level notify( "rog_strike" );
|
|
thread rog_shockwave();
|
|
wait 0.1;
|
|
|
|
if ( level.vfx_debug_do_rog_impact_effect )
|
|
{
|
|
wait 0.08;
|
|
playfxontag( common_scripts\utility::getfx( "rog_impact_04" ), var_2, "tag_origin" );
|
|
}
|
|
else
|
|
wait 0.4;
|
|
|
|
physicsexplosionsphere( var_1 + ( 0, 0, 1000 ), get_explosion_radius() * 0.5, get_explosion_radius() * 0.3, 3 );
|
|
var_4 = 5;
|
|
var_5 = get_explosion_radius() * 0.1;
|
|
|
|
while ( var_5 < get_explosion_radius() )
|
|
{
|
|
thread throw_rog_destruction( undefined, var_1, randomfloatrange( var_5 * 0.8, var_5 * 1.2 ) );
|
|
var_5 = var_5 + get_explosion_radius() / var_4;
|
|
wait( level.rog_explosion_grow_time / var_4 );
|
|
}
|
|
|
|
if ( common_scripts\utility::flag( "enemies_been_hit" ) && !common_scripts\utility::flag( "allies_been_hit" ) )
|
|
level notify( "enemy_hit" );
|
|
|
|
common_scripts\utility::flag_clear( "enemies_been_hit" );
|
|
common_scripts\utility::flag_clear( "allies_been_hit" );
|
|
physicsexplosionsphere( var_1 + ( 0, 0, 1000 ), get_explosion_radius(), get_explosion_radius() * 0.7, 3 );
|
|
|
|
if ( level.vfx_debug_do_structure_destruction )
|
|
{
|
|
thread random_post_hit_explosions( var_1 );
|
|
wait 3;
|
|
playfx( level._effect["thick_dark_smoke_giant_loki"], var_1 );
|
|
wait 5;
|
|
playfx( level._effect["thick_black_smoke_l"], var_1 );
|
|
}
|
|
}
|
|
|
|
random_post_hit_explosions( var_0 )
|
|
{
|
|
return;
|
|
|
|
for (;;)
|
|
{
|
|
wait( randomfloatrange( 1, 6 ) );
|
|
playfx( level._effect["explosion_01"], var_0 + ( randomfloatrange( -1000, 1000 ), randomfloatrange( -1000, 1000 ), 0 ) );
|
|
}
|
|
}
|
|
|
|
rog_hit_radiate_ground_shockwave( var_0, var_1 )
|
|
{
|
|
for ( var_2 = 0; var_2 < randomintrange( 1, 3 ); var_2++ )
|
|
{
|
|
var_3 = randomfloatrange( 0 - var_1 * 2, var_1 * 2 );
|
|
|
|
if ( var_3 < 0 && var_3 > 0 - var_1 * 0.75 )
|
|
var_3 = 0 - var_1 * 0.75;
|
|
|
|
if ( var_3 > 0 && var_3 < var_1 * 0.75 )
|
|
var_3 = var_1 * 0.75;
|
|
|
|
var_4 = randomfloatrange( 0 - var_1 * 2, var_1 * 2 );
|
|
|
|
if ( var_4 < 0 && var_4 > 0 - var_1 * 0.75 )
|
|
var_4 = 0 - var_1 * 0.75;
|
|
|
|
if ( var_4 > 0 && var_4 < var_1 * 0.75 )
|
|
var_4 = var_1 * 0.75;
|
|
|
|
var_5 = var_0[0] + var_3;
|
|
var_6 = var_0[1] + var_4;
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
get_ent_array_with_prefix( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
var_3 = [];
|
|
var_4 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_5 = maps\_utility::getent_or_struct_or_node( var_0 + var_2, var_1 );
|
|
|
|
if ( isdefined( var_5 ) )
|
|
var_3[var_4] = var_5;
|
|
else
|
|
break;
|
|
|
|
var_2++;
|
|
var_4++;
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
rog_setup_structures()
|
|
{
|
|
level.rog_structures = [];
|
|
var_0 = [];
|
|
level.rog_scriptables = [];
|
|
var_0 = getentarray( "destroy_erase", "targetname" );
|
|
level.rog_structures = maps\_utility::array_merge( level.rog_structures, var_0 );
|
|
var_0 = getentarray( "destroy_erase_terrain", "targetname" );
|
|
level.rog_structures = maps\_utility::array_merge( level.rog_structures, var_0 );
|
|
var_0 = getentarray( "destroy_spaceport", "targetname" );
|
|
level.rog_scriptables = maps\_utility::array_merge( level.rog_scriptables, var_0 );
|
|
var_0 = getentarray( "destroy_base", "targetname" );
|
|
level.rog_scriptables = maps\_utility::array_merge( level.rog_scriptables, var_0 );
|
|
var_0 = getentarray( "destroy_scaffolding", "targetname" );
|
|
level.rog_scriptables = maps\_utility::array_merge( level.rog_scriptables, var_0 );
|
|
var_0 = getentarray( "destroy_rocket", "targetname" );
|
|
level.rog_scriptables = maps\_utility::array_merge( level.rog_scriptables, var_0 );
|
|
}
|
|
|
|
rog_scriptable_radius_damage( var_0 )
|
|
{
|
|
var_1 = get_explosion_radius() * 0.7;
|
|
var_2 = get_explosion_radius() * 2;
|
|
wait 0.75;
|
|
radiusdamage( var_0, var_1, 10000, 8000 );
|
|
var_3 = [];
|
|
var_4 = [];
|
|
|
|
foreach ( var_6 in level.rog_scriptables )
|
|
{
|
|
var_7 = length( var_6.origin - var_0 );
|
|
|
|
if ( var_7 < var_1 )
|
|
var_3 = common_scripts\utility::array_add( var_3, var_6 );
|
|
else
|
|
var_4 = common_scripts\utility::array_add( var_4, var_6 );
|
|
|
|
level.rog_scriptables = var_4;
|
|
}
|
|
|
|
foreach ( var_6 in var_3 )
|
|
{
|
|
switch ( var_6.targetname )
|
|
{
|
|
case "destroy_spaceport":
|
|
playfx( level._effect["loki_rog_spaceport_center_explosion"], var_6.origin + ( 0, 0, 0 ), vectornormalize( var_6.origin - var_0 ), ( 0, 0, 1 ) );
|
|
break;
|
|
case "destroy_base":
|
|
playfx( level._effect["loki_rog_satellite_dish_explosion"], var_6.origin + ( 0, 0, 1000 ), vectornormalize( var_6.origin - var_0 ), ( 0, 0, 1 ) );
|
|
break;
|
|
case "destroy_scaffolding":
|
|
playfx( level._effect["loki_rog_rocket_scaffolding_explosion"], var_6.origin + ( 0, 0, 0 ), vectornormalize( var_6.origin - var_0 ), ( 0, 0, 1 ) );
|
|
break;
|
|
}
|
|
}
|
|
|
|
var_11 = [];
|
|
var_4 = [];
|
|
|
|
foreach ( var_6 in level.rog_scriptables )
|
|
{
|
|
var_7 = length( var_6.origin - var_0 );
|
|
|
|
if ( var_7 < var_2 && var_7 >= var_1 )
|
|
var_11 = common_scripts\utility::array_add( var_11, var_6 );
|
|
}
|
|
|
|
wait 0.1;
|
|
|
|
foreach ( var_6 in var_11 )
|
|
{
|
|
switch ( var_6.targetname )
|
|
{
|
|
case "destroy_spaceport":
|
|
playfx( level._effect["loki_rog_spaceport_center_perimeter_hit"], var_6.origin + ( 0, 0, 2500 ), vectornormalize( var_6.origin - var_0 ), ( 0, 0, 1 ) );
|
|
break;
|
|
case "destroy_base":
|
|
playfx( level._effect["loki_rog_satellite_dish_perimeter_hit"], var_6.origin + ( 0, 0, 1000 ), vectornormalize( var_6.origin - var_0 ), ( 0, 0, 1 ) );
|
|
break;
|
|
case "destroy_scaffolding":
|
|
playfx( level._effect["loki_rog_rocket_scaffolding_perimeter_hit"], var_6.origin + ( 0, 0, 2500 ), vectornormalize( var_6.origin - var_0 ), ( 0, 0, 1 ) );
|
|
break;
|
|
case "destroy_rocket":
|
|
playfx( level._effect["loki_rog_satellite_dish_perimeter_hit"], var_6.origin + ( 0, 0, 2000 ), vectornormalize( var_6.origin - var_0 ), ( 0, 0, 1 ) );
|
|
break;
|
|
case "destroy_small":
|
|
radiusdamage( var_6.origin, 10, 10000, 9000 );
|
|
var_6 delete();
|
|
break;
|
|
default:
|
|
playfx( level._effect["loki_rog_satellite_dish_perimeter_hit"], var_6.origin + ( 0, 0, 500 ), vectornormalize( var_6.origin - var_0 ), ( 0, 0, 1 ) );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
rog_structure_destruction( var_0 )
|
|
{
|
|
var_1 = [];
|
|
var_2 = [];
|
|
|
|
foreach ( var_4 in level.rog_structures )
|
|
{
|
|
var_5 = length( var_4.origin - var_0 );
|
|
|
|
if ( var_5 < get_explosion_radius() )
|
|
{
|
|
var_1 = common_scripts\utility::array_add( var_1, var_4 );
|
|
continue;
|
|
}
|
|
|
|
var_2 = common_scripts\utility::array_add( var_2, var_4 );
|
|
}
|
|
|
|
level.rog_structures = var_2;
|
|
var_7 = 1;
|
|
var_8 = 0.06;
|
|
|
|
while ( var_7 < get_explosion_radius() )
|
|
{
|
|
var_7 = var_7 + get_explosion_radius() * var_8;
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
var_5 = length( var_4.origin - var_0 );
|
|
|
|
if ( !isdefined( var_4.already_thrown ) && var_7 * 1.25 > var_5 )
|
|
{
|
|
var_4.already_thrown = 1;
|
|
|
|
if ( var_4.targetname == "destroy_erase" )
|
|
{
|
|
playfx( level._effect["small_building_post_exp"], var_4.origin, anglestoup( var_4.angles ), anglestoforward( var_4.angles ) );
|
|
var_4 hide();
|
|
var_4 delete();
|
|
continue;
|
|
}
|
|
|
|
if ( var_4.targetname == "destroy_erase_terrain" )
|
|
{
|
|
playfx( common_scripts\utility::getfx( "explosion_01" ), var_4.origin );
|
|
wait 0.3;
|
|
var_4 hide();
|
|
var_4 delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
var_1 = common_scripts\utility::array_removeundefined( var_1 );
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
throw_rog_destruction( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !level.vfx_debug_do_structure_destruction )
|
|
return;
|
|
|
|
var_4 = 0;
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
{
|
|
var_4 = 1;
|
|
var_0 = spawn( "script_model", ( var_1[0] + randomintrange( -500, 500 ), var_1[1] + randomintrange( -500, 500 ), var_1[2] + randomintrange( 10, 150 ) ) );
|
|
var_5 = randomintrange( 0, 6 );
|
|
|
|
switch ( var_5 )
|
|
{
|
|
case 0:
|
|
var_0 setmodel( "afr_bg_building_04" );
|
|
break;
|
|
case 2:
|
|
case 1:
|
|
var_0 setmodel( "afr_bg_building_04" );
|
|
break;
|
|
case 3:
|
|
var_0 setmodel( "afr_bg_building_04" );
|
|
break;
|
|
case 6:
|
|
case 5:
|
|
case 4:
|
|
var_0 setmodel( "afr_bg_building_04" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
var_6 = randomfloatrange( 0.1, 0.5 );
|
|
var_7 = var_0.origin[2];
|
|
var_8 = var_0.origin;
|
|
var_9 = vectornormalize( var_0.origin - var_1 );
|
|
var_10 = randomfloatrange( 5000, 7500 );
|
|
var_11 = ( randomfloatrange( 5, 30 ), randomfloatrange( 5, 30 ), randomfloatrange( 5, 30 ) );
|
|
|
|
if ( var_9[2] > var_9[1] && var_9[2] > var_9[0] )
|
|
{
|
|
var_0 hide();
|
|
return;
|
|
}
|
|
|
|
var_12 = var_8 + var_9 * var_10 * 0.2;
|
|
var_0 moveto( var_12 + ( 0, 0, 200 ), var_6, 0, 0 );
|
|
var_0 rotateby( var_11, var_6, 0, 0 );
|
|
wait( var_6 - 0.05 );
|
|
var_12 = var_8 + var_9 * var_10 * 0.4;
|
|
var_0 moveto( var_12 + ( 0, 0, 350 ), var_6, 0, 0 );
|
|
var_0 rotateby( var_11, var_6, 0, 0 );
|
|
wait( var_6 - 0.05 );
|
|
var_12 = var_8 + var_9 * var_10 * 0.6;
|
|
var_0 moveto( var_12 + ( 0, 0, 200 ), var_6, 0, 0 );
|
|
var_0 rotateby( var_11, var_6, 0, 0 );
|
|
wait( var_6 - 0.05 );
|
|
var_12 = var_8 + var_9 * var_10 * 0.8;
|
|
var_0 moveto( var_12, var_6, 0, 0 );
|
|
var_0 rotateby( var_11, var_6, 0, 0 );
|
|
wait( var_6 - 0.05 );
|
|
var_12 = var_8 + var_9 * var_10 * 1.4;
|
|
var_6 = var_6 + 0.5;
|
|
var_0 moveto( ( var_12[0], var_12[1], getgroundposition( var_0.origin, 5 )[2] - 1000 ), var_6, 0, 0 );
|
|
var_0 rotateby( var_11, var_6, 0, 0 );
|
|
wait( var_6 - 0.05 );
|
|
playfx( level._effect["building_crumble_directional"], var_0.origin, vectornormalize( var_0.origin - var_1 ), ( 0, 0, 1 ) );
|
|
wait( var_6 * 0.2 );
|
|
var_0.origin = var_0.origin + ( 0, 0, -3000 );
|
|
|
|
if ( var_4 )
|
|
var_0 delete();
|
|
}
|
|
|
|
rog_building_collapse()
|
|
{
|
|
var_0 = self;
|
|
var_1 = spawn( "script_origin", var_0.origin );
|
|
var_1.angles = var_0.angles;
|
|
var_1 addpitch( randomintrange( -10, 10 ) );
|
|
var_1 addyaw( randomintrange( -10, 10 ) );
|
|
var_2 = randomintrange( -2000, -1500 );
|
|
var_1.origin = var_1.origin + ( 0, 0, var_2 );
|
|
var_3 = randomfloatrange( 3.0, 6.0 );
|
|
var_4 = randomfloatrange( 4.0, 8.0 );
|
|
|
|
if ( isdefined( var_0.health ) )
|
|
{
|
|
if ( var_0.health == 100 )
|
|
{
|
|
wait( randomfloatrange( 0.5, 1.0 ) );
|
|
playfx( common_scripts\utility::getfx( "building_blast" ), var_0.origin );
|
|
|
|
if ( isdefined( var_0.target ) )
|
|
{
|
|
var_5 = getent( var_0.target, "targetname" );
|
|
var_5 moveto( var_5.origin + ( 0, 0, 380 ), var_3, 3 );
|
|
}
|
|
|
|
var_0 moveto( var_1.origin, var_3, 3, 0 );
|
|
var_0 rotateto( var_1.angles, var_4, 4, 0 );
|
|
wait 2.0;
|
|
playfx( common_scripts\utility::getfx( "building_collapse_01" ), var_0.origin );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
playfx( common_scripts\utility::getfx( "building_collapse_02" ), var_0.origin );
|
|
var_0 hide();
|
|
}
|
|
}
|
|
|
|
destruction_reset()
|
|
{
|
|
foreach ( var_1 in level.crater_array )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
var_1 delete();
|
|
}
|
|
}
|
|
|
|
waittill_any_plus_return( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
var_2 = spawnstruct();
|
|
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
childthread common_scripts\utility::waittill_string( var_4, var_2 );
|
|
|
|
if ( var_4 == "death" )
|
|
var_1 = 1;
|
|
}
|
|
|
|
if ( !var_1 )
|
|
self endon( "death" );
|
|
|
|
var_2 waittill( "returned", var_6 );
|
|
var_2 notify( "die" );
|
|
return var_6;
|
|
}
|
|
|
|
space_cleanup()
|
|
{
|
|
var_0 = getweaponarray();
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 delete();
|
|
|
|
var_4 = getscriptablearray();
|
|
|
|
foreach ( var_6 in var_4 )
|
|
var_6 delete();
|
|
|
|
var_8 = getaiarray( "axis" );
|
|
|
|
foreach ( var_10 in var_8 )
|
|
var_10 delete();
|
|
|
|
if ( isdefined( level.player.hud_space_helmet_rim ) )
|
|
level.player.hud_space_helmet_rim maps\_hud_util::destroyelem();
|
|
|
|
level.player maps\loki::player_helmet_disable();
|
|
}
|
|
|
|
get_explosion_radius()
|
|
{
|
|
return level.rog_explosion_radius["rod"];
|
|
}
|
|
|
|
rog_add_hud_element_on_target()
|
|
{
|
|
var_0 = newhudelem();
|
|
var_0.x = 0;
|
|
var_0.y = 0;
|
|
var_0.alignx = "center";
|
|
var_0.aligny = "middle";
|
|
var_0.horzalign = "center";
|
|
var_0.vertalign = "middle";
|
|
var_0.alpha = 1.0;
|
|
var_0 setshader( "hud_rog_target_building_g", 8, 8 );
|
|
var_0 settargetent( self );
|
|
var_0 setwaypoint( 1, 0, 0, 0 );
|
|
return var_0;
|
|
}
|
|
|
|
set_rog_section_gravity()
|
|
{
|
|
wait 1;
|
|
setsaveddvar( "phys_gravity_ragdoll", -610 );
|
|
setsaveddvar( "phys_gravity", -610 );
|
|
}
|
|
|
|
rog_targeting_pip()
|
|
{
|
|
level.pip_camera = common_scripts\utility::spawn_tag_origin();
|
|
level.pip = level.player newpip();
|
|
level.pip.x = -80;
|
|
level.pip.y = 0;
|
|
level.pip.width = 800;
|
|
level.pip.height = 600;
|
|
level.pip.freecamera = 1;
|
|
level.pip.fov = 90;
|
|
level.pip.enableshadows = 1;
|
|
level.pip.entity = level.pip_camera;
|
|
level.pip.origin = level.pip_camera.origin;
|
|
level.pip.tag = "tag_origin";
|
|
wait 1000;
|
|
level.pip.entity = undefined;
|
|
level.pip.camera = undefined;
|
|
level.pip = undefined;
|
|
level.pip_camera delete();
|
|
}
|
|
|
|
pip_show_target( var_0 )
|
|
{
|
|
wait 2;
|
|
level.pip_camera.origin = var_0 + ( 6000, 0, 1000 );
|
|
var_1 = var_0 - level.pip_camera.origin;
|
|
level.pip_camera.angles = vectortoangles( var_1 );
|
|
level.pip.enable = 1;
|
|
var_1 = level.rog_aoe_reticle.origin - level.pip_camera.origin;
|
|
level.pip.look = var_1;
|
|
wait 2;
|
|
level.pip.enable = 0;
|
|
}
|
|
|
|
checking_for_hits()
|
|
{
|
|
level.recent_rog_hits = 0;
|
|
|
|
while ( !common_scripts\utility::flag( "ROG_take_in_destruction" ) )
|
|
wait 4;
|
|
}
|
|
|
|
update_scripted_explosion_point( var_0 )
|
|
{
|
|
var_1 = 3.5;
|
|
|
|
if ( !common_scripts\utility::flag( "ROG_hit_loc_1" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_hit_loc_1" );
|
|
level.explosion_vehicle_killer1 = common_scripts\utility::spawn_tag_origin();
|
|
level.explosion_vehicle_killer1.origin = var_0 + ( 0, 0, 0 );
|
|
wait( var_1 );
|
|
level.explosion_vehicle_killer1 delete();
|
|
common_scripts\utility::flag_clear( "ROG_hit_loc_1" );
|
|
return;
|
|
}
|
|
|
|
if ( !common_scripts\utility::flag( "ROG_hit_loc_2" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_hit_loc_2" );
|
|
level.explosion_vehicle_killer2 = common_scripts\utility::spawn_tag_origin();
|
|
level.explosion_vehicle_killer2.origin = var_0 + ( 0, 0, 0 );
|
|
wait( var_1 );
|
|
level.explosion_vehicle_killer2 delete();
|
|
common_scripts\utility::flag_clear( "ROG_hit_loc_2" );
|
|
return;
|
|
}
|
|
|
|
if ( !common_scripts\utility::flag( "ROG_hit_loc_3" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_hit_loc_3" );
|
|
level.explosion_vehicle_killer3 = common_scripts\utility::spawn_tag_origin();
|
|
level.explosion_vehicle_killer3.origin = var_0 + ( 0, 0, 0 );
|
|
wait( var_1 );
|
|
level.explosion_vehicle_killer3 delete();
|
|
common_scripts\utility::flag_clear( "ROG_hit_loc_3" );
|
|
return;
|
|
}
|
|
|
|
if ( !common_scripts\utility::flag( "ROG_hit_loc_4" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_hit_loc_4" );
|
|
level.explosion_vehicle_killer4 = common_scripts\utility::spawn_tag_origin();
|
|
level.explosion_vehicle_killer4.origin = var_0 + ( 0, 0, 0 );
|
|
wait( var_1 );
|
|
level.explosion_vehicle_killer4 delete();
|
|
common_scripts\utility::flag_clear( "ROG_hit_loc_4" );
|
|
return;
|
|
}
|
|
}
|
|
|
|
vehicle_activate_outline( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
common_scripts\utility::flag_wait( var_0 );
|
|
|
|
self hudoutlineenable( 4, 0 );
|
|
}
|
|
|
|
friendly_vehicle_activate_outline( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
common_scripts\utility::flag_wait( var_0 );
|
|
|
|
self hudoutlineenable( 3, 0 );
|
|
}
|
|
|
|
check_for_rog_death( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
common_scripts\utility::flag_wait( var_1 );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "rog_explosion", var_2, var_3 );
|
|
|
|
if ( var_3 != "rod" )
|
|
continue;
|
|
|
|
childthread rog_vehicle_handle_rod_impact( var_2 );
|
|
}
|
|
}
|
|
|
|
vehicle_overkill_from_rog()
|
|
{
|
|
playfx( level._effect["building_blast"], self.origin );
|
|
rog_target_remove_hud_element();
|
|
self delete();
|
|
}
|
|
|
|
vehicle_blow_up_from_rog()
|
|
{
|
|
self notify( "vehicle_ROG_death" );
|
|
|
|
if ( isdefined( self.vehicletype ) )
|
|
{
|
|
playfxontag( level._effect["building_blast"], self, "tag_origin" );
|
|
rog_target_remove_hud_element( 1 );
|
|
|
|
if ( issubstr( self.classname, "mig" ) )
|
|
thread rog_kill_jet();
|
|
|
|
if ( issubstr( self.classname, "hind" ) )
|
|
thread rog_kill_helicopter();
|
|
else
|
|
self kill();
|
|
}
|
|
}
|
|
|
|
setup_rog_warscene()
|
|
{
|
|
level.impact_location1 = common_scripts\utility::spawn_tag_origin();
|
|
level.impact_location = ( 0, 0, 0 );
|
|
wait 4;
|
|
common_scripts\utility::flag_wait( "ROG_take_in_destruction" );
|
|
wait 2;
|
|
}
|
|
|
|
spawn_stage1_missile_trucks()
|
|
{
|
|
var_0 = getentarray( "ROG_missile_truck_area01", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread create_single_missile_truck( 1, var_2.origin, var_2.angles, "ROG_look_at_sat_farm" );
|
|
}
|
|
|
|
spawn_stage2_missile_trucks()
|
|
{
|
|
var_0 = getentarray( "ROG_missile_truck_area02", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread create_single_missile_truck( 2, var_2.origin, var_2.angles, "ROG_look_at_main_base" );
|
|
}
|
|
|
|
spawn_stage3_missile_trucks()
|
|
{
|
|
var_0 = getentarray( "ROG_missile_truck_area03", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread create_single_missile_truck( 3, var_2.origin, var_2.angles, "ROG_look_at_main_base" );
|
|
}
|
|
|
|
create_single_missile_truck( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = spawn( "script_model", var_1 );
|
|
var_4 setmodel( "vehicle_m880_launcher_low" );
|
|
var_4.angles = var_2;
|
|
var_4 endon( "vehicle_ROG_death" );
|
|
var_4 thread vehicle_activate_outline( var_3 );
|
|
var_4 thread check_for_rog_death( var_4, var_3 );
|
|
wait 11;
|
|
|
|
for (;;)
|
|
{
|
|
wait( randomfloatrange( 4, 10 ) );
|
|
var_5 = ( randomfloatrange( -19000, -15000 ), randomfloatrange( 3000, 6404 ), -128075 );
|
|
var_4 thread missile_truck_fire_missile( var_5 );
|
|
}
|
|
}
|
|
|
|
missile_truck_fire_missile( var_0 )
|
|
{
|
|
var_1 = common_scripts\utility::spawn_tag_origin();
|
|
var_1.origin = self.origin;
|
|
var_2 = self.origin - var_0;
|
|
var_1.angles = vectortoangles( var_2 );
|
|
var_3 = var_0[0] - self.origin[0];
|
|
var_4 = var_0[1] - self.origin[1];
|
|
var_5 = distance2d( var_0, self.origin ) * 0.75;
|
|
var_6 = 32;
|
|
var_7 = 16;
|
|
var_8 = 0.32;
|
|
var_9 = 1 / var_6;
|
|
var_10 = var_5 / var_6;
|
|
var_11 = [];
|
|
var_12 = [];
|
|
var_13 = [];
|
|
|
|
for ( var_14 = 1; var_14 <= var_6; var_14++ )
|
|
{
|
|
var_11[var_14 - 1] = self.origin[0] + var_3 * ( var_9 * var_14 );
|
|
var_12[var_14 - 1] = self.origin[1] + var_4 * ( var_9 * var_14 );
|
|
}
|
|
|
|
for ( var_14 = 1; var_14 <= var_7; var_14++ )
|
|
var_13[var_14 - 1] = self.origin[2] + var_10 * sqrt( var_14 );
|
|
|
|
var_15 = var_7;
|
|
|
|
for ( var_14 = var_7; var_14 <= var_6; var_14++ )
|
|
{
|
|
var_13[var_14] = self.origin[2] + var_10 * sqrt( var_15 );
|
|
var_15--;
|
|
}
|
|
|
|
var_1 thread rog_missile_fx_trail( var_8, var_6 );
|
|
|
|
for ( var_14 = 1; var_14 <= var_6; var_14++ )
|
|
{
|
|
if ( !isdefined( var_13[var_14 - 1] ) )
|
|
{
|
|
iprintln( "Z " + ( var_14 - 1 ) + " is undefined" );
|
|
break;
|
|
}
|
|
|
|
var_1 moveto( ( var_11[var_14 - 1], var_12[var_14 - 1], var_13[var_14] ), var_8 );
|
|
wait( var_8 - 0.05 );
|
|
}
|
|
|
|
var_1 moveto( var_0, var_8 );
|
|
wait( var_8 - 0.05 );
|
|
playfx( common_scripts\utility::getfx( "loki_m880_missile_impact" ), var_0, ( 0, 0, 1 ), anglestoforward( var_1.angles ) );
|
|
stopfxontag( common_scripts\utility::getfx( "smoke_geotrail_missile_large" ), var_1, "tag_origin" );
|
|
level notify( "rog_explosion", var_0, "missile" );
|
|
var_1 delete();
|
|
}
|
|
|
|
rog_missile_fx_trail( var_0, var_1 )
|
|
{
|
|
var_2 = var_0 * var_1;
|
|
playfxontag( common_scripts\utility::getfx( "smoke_geotrail_missile_large" ), self, "tag_origin" );
|
|
self.angles = ( 45, self.angles[1], self.angles[2] );
|
|
self rotatepitch( -90, var_2 );
|
|
}
|
|
|
|
spawn_stage1_bombing_runs()
|
|
{
|
|
while ( !common_scripts\utility::flag( "ROG_look_at_train" ) )
|
|
{
|
|
thread spawn_bombing_run();
|
|
thread spawn_dogfight_pass();
|
|
wait( randomfloatrange( 2.5, 6 ) );
|
|
}
|
|
}
|
|
|
|
spawn_stage1_attack_ground_vehicles()
|
|
{
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
thread spawn_single_stage1_ground_vehicle();
|
|
}
|
|
|
|
spawn_stage2_attack_ground_vehicles()
|
|
{
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
thread spawn_single_stage2_ground_vehicle();
|
|
}
|
|
|
|
spawn_stage3_attack_ground_vehicles()
|
|
{
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
thread spawn_single_stage3_ground_vehicle();
|
|
}
|
|
|
|
spawn_single_stage1_ground_vehicle()
|
|
{
|
|
var_0 = ( randomfloatrange( -9000, 9000 ), randomfloatrange( -68000, -44000 ), -128175 );
|
|
var_1 = ( randomfloatrange( 5126, 8385 ), randomfloatrange( -33139, -32415 ), -128470 );
|
|
var_2 = ( randomfloatrange( 3261, 6943 ), randomfloatrange( -21008, -20620 ), -127338 );
|
|
var_3 = ( randomfloatrange( -7832, 7069 ), randomfloatrange( -2640, -1722 ), -127338 );
|
|
spawn_single_ground_vehicle( var_0, var_1, var_2, var_3, "ROG_look_at_sat_farm" );
|
|
}
|
|
|
|
spawn_single_stage2_ground_vehicle()
|
|
{
|
|
var_0 = ( randomfloatrange( -30000, -4000 ), randomfloatrange( -45000, -5000 ), -127515 );
|
|
var_1 = ( randomfloatrange( -29000, 0 ), randomfloatrange( -23000, -5000 ), -127515 );
|
|
var_2 = ( randomfloatrange( -29000, 0 ), randomfloatrange( -23000, -5000 ), -127515 );
|
|
var_3 = ( randomfloatrange( -29000, 0 ), randomfloatrange( -23000, -5000 ), -127515 );
|
|
spawn_single_ground_vehicle( var_0, var_1, var_2, var_3, "ROG_look_at_main_base" );
|
|
}
|
|
|
|
spawn_single_stage3_ground_vehicle()
|
|
{
|
|
var_0 = ( randomfloatrange( -30000, 4000 ), randomfloatrange( 15000, 34415 ), -127000 );
|
|
var_1 = ( randomfloatrange( -10000, 0 ), randomfloatrange( 15000, 20415 ), -127000 );
|
|
var_2 = ( randomfloatrange( -10000, 0 ), randomfloatrange( 15000, 20415 ), -127000 );
|
|
var_3 = ( randomfloatrange( -10000, 0 ), randomfloatrange( 15000, 20415 ), -127000 );
|
|
spawn_single_ground_vehicle( var_0, var_1, var_2, var_3, "ROG_look_at_airfield" );
|
|
}
|
|
|
|
spawn_single_ground_vehicle( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = spawn( "script_model", var_0 );
|
|
var_5 setmodel( "vehicle_t90ms_tank_iw6_low" );
|
|
var_5 endon( "vehicle_ROG_death" );
|
|
var_5 thread vehicle_activate_outline( var_4 );
|
|
var_5 thread check_for_rog_death( var_5, var_4 );
|
|
var_6 = randomfloatrange( 55, 65 );
|
|
var_7 = var_1 - var_0;
|
|
var_5 rotateto( vectortoangles( var_7 ), 0.1 );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
common_scripts\utility::flag_wait( var_4 );
|
|
else
|
|
wait( randomfloatrange( 0, 2 ) );
|
|
|
|
var_5 moveto( var_1, var_6, var_6 * 0.3, var_6 * 0.3 );
|
|
var_5 waittill( "movedone" );
|
|
var_6 = randomfloatrange( 25, 35 );
|
|
var_7 = var_2 - var_1;
|
|
var_5 rotateto( vectortoangles( var_7 ), 5, 2, 2 );
|
|
var_5 moveto( var_2, var_6, var_6 * 0.3, var_6 * 0.3 );
|
|
var_5 waittill( "movedone" );
|
|
var_6 = randomfloatrange( 15, 25 );
|
|
var_7 = var_3 - var_2;
|
|
var_5 rotateto( vectortoangles( var_7 ), 5, 2, 2 );
|
|
var_5 moveto( var_3, var_6, var_6 * 0.3, var_6 * 0.3 );
|
|
var_5 waittill( "movedone" );
|
|
}
|
|
|
|
spawn_stage1_attack_helos()
|
|
{
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
thread spawn_single_helo();
|
|
}
|
|
|
|
spawn_single_helo()
|
|
{
|
|
var_0 = ( randomfloatrange( -36000, 13000 ), randomfloatrange( -80000, -50000 ), randomfloatrange( -126500, -124000 ) );
|
|
var_1 = spawn( "script_model", var_0 );
|
|
var_1 setmodel( "vehicle_battle_hind_low" );
|
|
var_1 thread vehicle_activate_outline( "ROG_look_at_main_base" );
|
|
var_1 endon( "vehicle_ROG_death" );
|
|
var_1 thread check_for_rog_death( var_1 );
|
|
var_2 = common_scripts\utility::spawn_tag_origin();
|
|
var_2.origin = var_1.origin;
|
|
var_3 = ( -16712, 6404, -128075 );
|
|
|
|
for (;;)
|
|
{
|
|
var_4 = ( randomfloatrange( -30000, -4000 ), randomfloatrange( -45000, -5000 ), randomfloatrange( -126500, -124000 ) );
|
|
var_5 = randomfloatrange( 15, 35 );
|
|
var_6 = var_4 - var_0;
|
|
var_1 rotateto( vectortoangles( var_6 ), 5, 2, 2 );
|
|
var_1 moveto( var_4, var_5, var_5 * 0.3, var_5 * 0.3 );
|
|
var_1 waittill( "movedone" );
|
|
var_6 = var_3 - var_1.origin;
|
|
var_1 rotateto( vectortoangles( var_6 ), 5, 2, 2 );
|
|
var_2.origin = var_1.origin;
|
|
var_2.angles = vectortoangles( var_6 );
|
|
playfxontag( level._effect["antiair_runner_flak"], var_2, "tag_origin" );
|
|
wait( var_5 * 0.5 );
|
|
stopfxontag( level._effect["antiair_runner_flak"], var_2, "tag_origin" );
|
|
}
|
|
}
|
|
|
|
spawn_dogfight_pass()
|
|
{
|
|
|
|
}
|
|
|
|
spawn_bombing_run( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = ( randomfloatrange( -40638, -2454 ), randomfloatrange( -80675, -69493 ), -124148 );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = ( randomfloatrange( -18256, 26735 ), randomfloatrange( 48087, 52200 ), -124148 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = randomfloatrange( 10, 20 );
|
|
|
|
var_3 = 0;
|
|
var_4 = randomintrange( 2, 7 );
|
|
|
|
for ( var_5 = 0; var_5 < var_4; var_5++ )
|
|
{
|
|
if ( var_4 < 4 )
|
|
thread single_bomb_run_script( var_0 + ( var_3, 0 - abs( var_3 ), 0 ), var_1 + ( var_3, 0 - abs( var_3 ), 0 ), var_2, "large" );
|
|
else
|
|
thread single_bomb_run_script( var_0 + ( var_3, 0 - abs( var_3 ), 0 ), var_1 + ( var_3, 0 - abs( var_3 ), 0 ), var_2, "small" );
|
|
|
|
if ( var_3 < 0 )
|
|
{
|
|
var_3 = ( var_3 - randomfloatrange( 500, 2000 ) ) * -1;
|
|
continue;
|
|
}
|
|
|
|
var_3 = ( var_3 + randomfloatrange( 500, 2000 ) ) * -1;
|
|
}
|
|
}
|
|
|
|
single_bomb_run_script( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_2 = var_2 * randomfloatrange( 0.9, 1.1 );
|
|
var_4 = spawn( "script_model", var_0 + ( 0, 0, randomfloatrange( 0, 3000 ) ) );
|
|
var_4 setmodel( "vehicle_mig29" );
|
|
var_4 thread vehicle_activate_outline( "ROG_look_at_sat_farm" );
|
|
var_4 endon( "vehicle_ROG_death" );
|
|
var_5 = common_scripts\utility::spawn_tag_origin();
|
|
var_5.origin = var_4.origin + ( 0, -300, 0 );
|
|
var_5 linkto( var_4 );
|
|
var_6 = common_scripts\utility::spawn_tag_origin();
|
|
var_6.origin = var_1;
|
|
var_7 = var_1 - var_0;
|
|
var_4.angles = vectortoangles( var_7 );
|
|
var_5 unlink();
|
|
var_8 = var_0 - var_1;
|
|
var_5.angles = vectortoangles( var_8 );
|
|
var_5 linkto( var_4 );
|
|
var_4 thread check_for_rog_death( var_4 );
|
|
playfxontag( level._effect["battle_contrail"], var_5, "tag_origin" );
|
|
playfxontag( level._effect["engineeffect"], var_5, "tag_origin" );
|
|
var_4 moveto( var_1, var_2 );
|
|
|
|
if ( randomintrange( 0, 10 ) > 3 )
|
|
{
|
|
var_9 = var_2 * randomfloatrange( 0.4, 0.75 );
|
|
wait( var_9 );
|
|
var_4 moveto( var_1 + ( 0, 0, randomfloatrange( 5000, 16000 ) ), var_2 - var_9 );
|
|
|
|
if ( var_3 == "large" )
|
|
{
|
|
for ( var_10 = 0; var_10 < randomintrange( 1, 3 ); var_10++ )
|
|
{
|
|
playfx( level._effect["explosion_01"], var_4.origin + ( 0, 0, -4000 ) );
|
|
wait( randomfloatrange( 0.1, 0.3 ) );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( var_10 = 0; var_10 < randomintrange( 4, 10 ); var_10++ )
|
|
{
|
|
playfx( level._effect["loki_m880_missile_impact"], var_4.origin + ( 0, 0, -4000 ) );
|
|
wait( randomfloatrange( 0.05, 0.2 ) );
|
|
}
|
|
}
|
|
|
|
var_4 waittill( "movedone" );
|
|
}
|
|
else
|
|
{
|
|
wait( var_2 * randomfloatrange( 0.1, 0.7 ) );
|
|
playfxontag( level._effect["vfx_fire_burning_zerog"], var_4, "tag_origin" );
|
|
wait( var_2 * randomfloatrange( 0.1, 0.2 ) );
|
|
playfxontag( level._effect["building_blast"], var_4, "tag_origin" );
|
|
var_4 moveto( ( var_4.origin[0] + randomfloatrange( 1000, 2000 ), var_4.origin[1] + randomfloatrange( 3000, 6000 ), var_4.origin[2] - 3000 ), 3 );
|
|
var_4 rotateto( ( randomintrange( 100, 1350 ), randomintrange( 100, 1350 ), randomintrange( 100, 1350 ) ), 3 );
|
|
wait 2.9;
|
|
playfxontag( level._effect["building_blast"], var_4, "tag_origin" );
|
|
wait 0.1;
|
|
stopfxontag( level._effect["vfx_fire_burning_zerog"], var_4, "tag_origin" );
|
|
}
|
|
|
|
stopfxontag( level._effect["battle_contrail"], var_5, "tag_origin" );
|
|
stopfxontag( level._effect["engineeffect"], var_5, "tag_origin" );
|
|
wait 1;
|
|
var_5 delete();
|
|
var_6 delete();
|
|
var_4 hudoutlinedisable();
|
|
var_4 delete();
|
|
}
|
|
|
|
rog_update_visibility_volume()
|
|
{
|
|
level notify( "visibility_update" );
|
|
level.rog_pass_fail["axis"]["targets"] = 0;
|
|
level thread rog_check_done();
|
|
level.rog_active_visibilty_volume = getent( "ROG_visibility_vol_" + level.rog_visibility_volume_index, "targetname" );
|
|
level.rog_visibility_volume_index++;
|
|
}
|
|
|
|
rog_update_visibility_volume_empty()
|
|
{
|
|
level notify( "visibility_update" );
|
|
level.rog_active_visibilty_volume = getent( "ROG_visibility_vol_3", "targetname" );
|
|
}
|
|
|
|
rog_update_visibility_volume_on_notify( var_0 )
|
|
{
|
|
level waittill( var_0 );
|
|
rog_update_visibility_volume();
|
|
}
|
|
|
|
rog_check_done()
|
|
{
|
|
level endon( "visibility_update" );
|
|
common_scripts\utility::flag_clear( "ROG_section_done" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.rog_pass_fail["axis"]["targets"] <= 0 )
|
|
break;
|
|
|
|
wait 0.5;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "ROG_section_done" );
|
|
}
|
|
|
|
wtf_is_it( var_0 )
|
|
{
|
|
for (;;)
|
|
wait 1.0;
|
|
}
|
|
|
|
debug_wait( var_0 )
|
|
{
|
|
while ( var_0 > 0 )
|
|
{
|
|
iprintln( var_0 );
|
|
|
|
if ( 1.0 < var_0 )
|
|
wait 1.0;
|
|
else
|
|
wait( var_0 );
|
|
|
|
var_0 = var_0 - 1.0;
|
|
}
|
|
}
|
|
|
|
rog_exit()
|
|
{
|
|
rog_achievement_check();
|
|
level thread transition_static( 0.0, 0 );
|
|
level thread rog_cleanup();
|
|
common_scripts\utility::flag_set( "ROG_exit" );
|
|
}
|
|
|
|
rog_cleanup()
|
|
{
|
|
destruction_reset();
|
|
level.player.ignoreme = 0;
|
|
level notify( "ROG_end" );
|
|
level notify( "slamzoom_start" );
|
|
maps\loki_rog_hud::remove_all_static_lines();
|
|
level notify( "ROG_new_sequence" );
|
|
level.player playersetgroundreferenceent( undefined );
|
|
level.player thermalvisionoff();
|
|
level.player thread maps\_load::thermal_effectsoff();
|
|
level.player enableturretdismount();
|
|
level.uav.view_rig maketurretinoperable();
|
|
level.uav.view_rig useby( level.player );
|
|
level.uav.view_rig delete();
|
|
level.uav.view_controller delete();
|
|
level.uav.target_ent delete();
|
|
level.uav delete();
|
|
level.player enableoffhandweapons();
|
|
level.player enableweaponswitch();
|
|
level.player allowcrouch( 1 );
|
|
level.player allowjump( 1 );
|
|
level.player allowmelee( 1 );
|
|
level.player allowprone( 1 );
|
|
level.player allowsprint( 1 );
|
|
level.player enableweaponswitch();
|
|
level.player allowmelee( 1 );
|
|
level.player allowfire( 1 );
|
|
level.player showviewmodel();
|
|
level.player clearclienttriggeraudiozone( 0.1 );
|
|
level.player allowads( 1 );
|
|
level.player maps\loki::player_helmet();
|
|
level.player unlink();
|
|
level.player notify( "end_uav_audio" );
|
|
level.bg_loop_sound delete();
|
|
level.uav_model delete();
|
|
setsaveddvar( "sv_znear", 0 );
|
|
setsaveddvar( "scr_dof_enable", 0 );
|
|
stopallrumbles();
|
|
level thread maps\loki_ending::get_player_ready_to_look_at_screen();
|
|
level.player setclientomnvar( "ui_loki_rog", 0 );
|
|
}
|
|
|
|
rog_uav_camera_move_audio()
|
|
{
|
|
self endon( "end_uav_audio" );
|
|
var_0 = 0;
|
|
level.bg_loop_sound = spawn( "script_origin", self.origin );
|
|
thread play_actuator_click();
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = self getnormalizedcameramovement();
|
|
|
|
if ( !var_0 && ( abs( var_1[0] ) > 0.25 || abs( var_1[1] ) > 0.25 ) )
|
|
{
|
|
level.bg_loop_sound playloopsound( "scn_loki_rog_servo_lp" );
|
|
var_0 = 1;
|
|
}
|
|
|
|
if ( var_0 && ( abs( var_1[0] ) < 0.25 && abs( var_1[1] ) < 0.25 ) )
|
|
{
|
|
level.bg_loop_sound stoploopsound();
|
|
var_0 = 0;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
play_actuator_click()
|
|
{
|
|
level endon( "ROG_script_done" );
|
|
var_0 = self getnormalizedcameramovement();
|
|
var_1 = var_0;
|
|
var_2 = var_0[0] - var_1[0] * 10;
|
|
var_3 = var_0[1] - var_1[1] * 10;
|
|
var_4 = var_2;
|
|
var_5 = var_3;
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = self getnormalizedcameramovement();
|
|
var_2 = var_0[0] - var_1[0] * 10;
|
|
var_3 = var_0[1] - var_1[1] * 10;
|
|
|
|
if ( !common_scripts\utility::flag( "click_too_soon" ) )
|
|
{
|
|
if ( length( var_0 - var_1 ) * 10 > 11 || abs( var_3 - var_5 ) > 9 && abs( var_0[1] * 10 ) > 7.5 || abs( var_2 - var_4 ) > 9 && abs( var_0[0] * 10 ) > 7.5 )
|
|
{
|
|
common_scripts\utility::flag_set( "click_too_soon" );
|
|
thread actuator_click_wait( 0.4 );
|
|
}
|
|
}
|
|
|
|
var_1 = var_0;
|
|
var_4 = var_2;
|
|
var_5 = var_3;
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
actuator_click_wait( var_0 )
|
|
{
|
|
wait( var_0 );
|
|
common_scripts\utility::flag_clear( "click_too_soon" );
|
|
}
|
|
|
|
rog_reveal_audio()
|
|
{
|
|
level endon( "ROG_script_done" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "target_reveal" );
|
|
level.player playsound( "scn_loki_rog_target_on" );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
rog_check_early_out()
|
|
{
|
|
common_scripts\utility::flag_wait( "ROG_look_at_airfield" );
|
|
level waittill( "visibility_update" );
|
|
wait 1.55;
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.rog_pass_fail["axis"]["targets"] <= 0 )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "ROG_early_out" );
|
|
}
|
|
|
|
rog_ambiant_battle_chatter()
|
|
{
|
|
level endon( "ROG_take_in_destruction" );
|
|
wait 1.0;
|
|
var_0 = [ "loki_mrk_beadvisedbadgerone", "loki_us2_roger", "loki_kgn_badgeronewheredo", "loki_us2_everywheretheyresettingup", "loki_us2_significantenemyforces", "loki_com_rogerbadgerrequisition", "loki_mrk_weretrackingmultiple", "loki_mrk_sendingintercept", "loki_kgn_coordinatesreceived" ];
|
|
var_1 = [ 4.25, 1.25, 2.75, 7.0, 5.5, 7.0, 3.75, 3.0, 8.0 ];
|
|
|
|
for (;;)
|
|
{
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
{
|
|
common_scripts\utility::flag_waitopen( "ROG_VO_script_active" );
|
|
self playsound( var_0[var_2] );
|
|
wait( var_1[var_2] );
|
|
}
|
|
}
|
|
}
|
|
|
|
rog_kill_jet()
|
|
{
|
|
var_0 = distance( self vehicle_getvelocity(), ( 0, 0, 0 ) );
|
|
var_1 = vectornormalize( anglestoforward( self.angles ) );
|
|
playfx( level._effect["loki_rog_jet_explosion_death"], self.origin, anglestoforward( self.angles ), anglestoup( self.angles ) );
|
|
self delete();
|
|
}
|
|
|
|
rog_kill_jet_even_more()
|
|
{
|
|
wait 7.0;
|
|
playfx( level._effect["vfx_exp_heli_sml_cg_cheap"], self.origin );
|
|
self delete();
|
|
}
|
|
|
|
rog_kill_helicopter()
|
|
{
|
|
self endon( "death" );
|
|
self kill();
|
|
wait( randomfloatrange( 3.5, 6.5 ) );
|
|
playfx( level._effect["vfx_exp_heli_sml_cg_cheap"], self.origin );
|
|
self delete();
|
|
}
|
|
|
|
rog_card_swap()
|
|
{
|
|
common_scripts\utility::flag_wait( "ROG_look_at_airfield" );
|
|
|
|
for ( var_0 = 0; var_0 < 4; var_0++ )
|
|
{
|
|
var_1 = getent( "ROG_air_strip_card_" + var_0, "targetname" );
|
|
var_1 delete();
|
|
}
|
|
}
|
|
|
|
rog_running_cleanup()
|
|
{
|
|
var_0 = [ 37.0, 3.0, 9.5 ];
|
|
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
{
|
|
wait( var_0[var_1] );
|
|
var_2 = getent( "ROG_cleanup_vol_" + var_1, "targetname" );
|
|
|
|
foreach ( var_4 in level.rog_target_models )
|
|
{
|
|
if ( isdefined( var_4 ) && var_4 istouching( var_2 ) )
|
|
var_4 rog_target_overkill_death( 1, 0 );
|
|
}
|
|
|
|
level.rog_target_models = common_scripts\utility::array_removeundefined( level.rog_target_models );
|
|
var_2 delete();
|
|
}
|
|
}
|
|
|
|
rog_check_pass_fail( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
if ( level.rog_pass_fail["axis"]["targets"] <= level.rog_pass_fail["axis"][var_0] )
|
|
var_1 = 1;
|
|
|
|
return var_1;
|
|
}
|
|
|
|
rog_fail_wrapper()
|
|
{
|
|
if ( !common_scripts\utility::flag( "ROG_no_fail" ) )
|
|
{
|
|
if ( level.rog_ff_fail )
|
|
setdvar( "ui_deadquote", &"LOKI_ROG_FAIL_FF" );
|
|
else if ( level.rog_track_fail )
|
|
setdvar( "ui_deadquote", &"LOKI_ROG_FAIL_TRAINTRACK" );
|
|
else
|
|
setdvar( "ui_deadquote", &"LOKI_ROG_FAIL" );
|
|
|
|
level thread maps\_utility::missionfailedwrapper();
|
|
}
|
|
}
|
|
|
|
rog_check_friendly_fire()
|
|
{
|
|
level endon( "rog_done" );
|
|
level endon( "ROG_passed" );
|
|
var_0 = 1;
|
|
|
|
for (;;)
|
|
{
|
|
if ( var_0 && level.rog_pass_fail["allies"]["targets"] > 0 )
|
|
{
|
|
common_scripts\utility::flag_waitopen( "ROG_VO_script_active" );
|
|
wait 0.5;
|
|
maps\_utility::smart_radio_dialogue( "loki_kgn_thompsongetyourshots" );
|
|
var_0 = 0;
|
|
|
|
if ( level.rog_pass_fail["allies"]["targets"] > level.rog_pass_fail["allies"]["c"] )
|
|
level.rog_pass_fail["allies"]["c"] = level.rog_pass_fail["allies"]["targets"] + 2;
|
|
}
|
|
else if ( !var_0 )
|
|
{
|
|
level.rog_ff_fail = level.rog_pass_fail["allies"]["targets"] > level.rog_pass_fail["allies"]["c"];
|
|
|
|
if ( level.rog_ff_fail )
|
|
{
|
|
level notify( "fail" );
|
|
rog_fail_wrapper();
|
|
}
|
|
}
|
|
|
|
wait 0.2;
|
|
}
|
|
}
|
|
|
|
rog_check_progress()
|
|
{
|
|
common_scripts\utility::flag_wait( "ROG_look_at_train" );
|
|
|
|
if ( !rog_check_pass_fail( "a" ) )
|
|
{
|
|
rog_fail_wrapper();
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "ROG_look_at_airfield" );
|
|
|
|
if ( !rog_check_pass_fail( "b" ) )
|
|
{
|
|
rog_fail_wrapper();
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "ROG_take_in_destruction" );
|
|
|
|
if ( !rog_check_pass_fail( "c" ) )
|
|
{
|
|
rog_fail_wrapper();
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "ROG_passed" );
|
|
}
|
|
|
|
rog_vo_section_a()
|
|
{
|
|
var_0 = 0;
|
|
var_1 = level common_scripts\utility::waittill_any_timeout( 6.0, "rog_strike" );
|
|
|
|
if ( var_1 == "rog_strike" || level.rog_strike_active > 0 )
|
|
{
|
|
if ( var_1 == "rog_strike" )
|
|
wait 1.15;
|
|
else
|
|
{
|
|
level waittill( "rog_strike" );
|
|
wait 1.15;
|
|
}
|
|
|
|
if ( level.rog_pass_fail["axis"]["targets"] < 3 )
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
level maps\_utility::smart_radio_dialogue( "loki_mrk_holytheyfeltthat" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
var_0 = 1;
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
maps\_utility::smart_radio_dialogue( "loki_gs3_weneedtoclear" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
level maps\_utility::smart_radio_dialogue( "loki_gs3_weneedtoclear" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
}
|
|
|
|
if ( !var_0 )
|
|
{
|
|
var_1 = level common_scripts\utility::waittill_any_timeout( 3.0, "rog_strike" );
|
|
|
|
if ( var_1 == "rog_strike" || level.rog_strike_active > 0 )
|
|
{
|
|
if ( var_1 == "rog_strike" )
|
|
wait 1.15;
|
|
else
|
|
{
|
|
level waittill( "rog_strike" );
|
|
wait 1.15;
|
|
}
|
|
|
|
if ( level.rog_pass_fail["axis"]["targets"] < 3 )
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
level maps\_utility::smart_radio_dialogue( "loki_mrk_holytheyfeltthat" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
maps\_utility::smart_radio_dialogue( "loki_us3_ourforcesneedsupport" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
}
|
|
}
|
|
|
|
var_2 = gettime();
|
|
common_scripts\utility::flag_wait( "rog_vo_0" );
|
|
|
|
if ( gettime() - var_2 > 250 )
|
|
{
|
|
if ( level.rog_pass_fail["axis"]["targets"] <= 0 )
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
maps\_utility::smart_radio_dialogue( "loki_kgn_southernreinforcements" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
}
|
|
}
|
|
}
|
|
|
|
rog_vo_section_b()
|
|
{
|
|
wait 3.0;
|
|
|
|
if ( level.rog_pass_fail["axis"]["targets"] <= level.rog_pass_fail["axis"]["b"] )
|
|
{
|
|
wait 1.0;
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
maps\_utility::smart_radio_dialogue( "loki_mrk_nicejobicarus" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
maps\_utility::smart_radio_dialogue( "loki_mrk_groundforcesneedmore" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
}
|
|
}
|
|
|
|
rog_vo_section_c()
|
|
{
|
|
wait 6.0;
|
|
|
|
while ( level.rog_strike_active > 0 )
|
|
wait 0.05;
|
|
|
|
if ( level.rog_pass_fail["axis"]["targets"] > level.rog_pass_fail["axis"]["c"] )
|
|
{
|
|
common_scripts\utility::flag_set( "ROG_VO_script_active" );
|
|
maps\_utility::smart_radio_dialogue( "loki_mrk_icarusgroundunitsare" );
|
|
common_scripts\utility::flag_clear( "ROG_VO_script_active" );
|
|
}
|
|
}
|
|
|
|
rog_achievement_gather_targets()
|
|
{
|
|
var_0 = 0;
|
|
var_1 = getentarray( "targets_spaceport_firing01", "targetname" );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_spaceport_firing04", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_spaceport_firing02", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_spaceport_firing03", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_spaceport_firing05", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_spaceport_firing06", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_spaceport_firing07", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_west_firing01", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_airfield_north_firing01", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_airfield_north_firing02", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_missile_launcher_area_02", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_missile_launcher_area_03", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "large_target_markers", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_missile_launcher_area_01", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_spaceport_01", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_dish_field_01", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_dish_field_02", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_dish_field_03", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_retreating_allies03", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_retreating_allies04", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_airfield_allies_moving_01", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_airfield_allies_static_01", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_airfield_allies_west_firing01", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_airfield_allies_north_firing01", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_airfield_allies_north_firing02", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_airfield_west", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_airfield_north_01", "targetname" ) );
|
|
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "targets_airfield_north_02", "targetname" ) );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( var_3.script_team == "axis" )
|
|
var_0++;
|
|
}
|
|
|
|
level.rog_achievement_target_count = var_0;
|
|
}
|
|
|
|
rog_achievement_check()
|
|
{
|
|
if ( level.rog_pass_fail["allies"]["targets"] <= 0 )
|
|
{
|
|
if ( level.rog_num_enemy_targets_killed + level.rog_achievement_target_count_adjustment >= level.rog_achievement_target_count )
|
|
level.player maps\_utility::player_giveachievement_wrapper( "LEVEL_17A" );
|
|
}
|
|
}
|
|
|
|
rog_check_train_track_damage( var_0 )
|
|
{
|
|
var_1 = level.rog_closest_path_node;
|
|
}
|