// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool satellite_start() { maps\odin_util::move_player_to_start_point( "start_odin_satellite_new" ); level.player thread maps\odin::give_weapons(); wait 0.1; maps\odin_util::actor_teleport( level.ally, "sat_finale_ally_tp_node" ); thread maps\odin_spin::spin_sat_and_earth_mover( 1 ); thread maps\odin_escape::manage_earth( "delete" ); common_scripts\utility::flag_set( "outline_rcs_lines" ); common_scripts\utility::flag_set( "jumpTo_dialogue_skip" ); common_scripts\utility::flag_set( "trigger_spacejump" ); common_scripts\utility::flag_set( "disable_kyra_leader" ); common_scripts\utility::flag_set( "landed_on_satellite" ); wait 5; level.ally setgoalpos( level.ally.origin ); } section_precache() { precachemodel( "odin_sat_section_04_a" ); precachemodel( "odin_sat_section_04_b" ); precachemodel( "odin_sat_section_04_c" ); precachemodel( "odin_sat_section_04_d" ); precachemodel( "us_space_a_body_cracked" ); precachemodel( "odin_thruster_pipes_damaged" ); precachestring( &"ODIN_SATELLITE_TIMEOUT" ); precacherumble( "light_1s" ); precacherumble( "light_3s" ); level thread maps\odin_sat_section_02_solar_panels_destruction::vfxinit(); } section_flag_init() { common_scripts\utility::flag_init( "satellite_setup_complete" ); common_scripts\utility::flag_init( "jumpTo_dialogue_skip" ); common_scripts\utility::flag_init( "stop_wall_pushing" ); common_scripts\utility::flag_init( "satellite_clear" ); common_scripts\utility::flag_init( "outline_rcs_lines" ); common_scripts\utility::flag_init( "satellite_end_anim_started" ); common_scripts\utility::flag_init( "first_finale_stage_done" ); common_scripts\utility::flag_init( "clear_to_fire_first_rog" ); common_scripts\utility::flag_init( "ROG_FIRING" ); common_scripts\utility::flag_init( "animated_sequence_complete" ); common_scripts\utility::flag_init( "triggered_finale" ); common_scripts\utility::flag_init( "player_has_fired" ); common_scripts\utility::flag_init( "end_ally_loop_anims" ); common_scripts\utility::flag_init( "hide_ally_finale_gun_prop" ); common_scripts\utility::flag_init( "show_ally_finale_gun_prop" ); common_scripts\utility::flag_init( "ally_at_sat" ); common_scripts\utility::flag_init( "reset_ground_to_zip" ); common_scripts\utility::flag_init( "ref_ent_for_explosion" ); common_scripts\utility::flag_init( "stop_tweaking_player" ); common_scripts\utility::flag_init( "damage_line_3" ); common_scripts\utility::flag_init( "new_pod_opens" ); } section_hint_string_init() { maps\_utility::add_hint_string( "ODIN_RCS_PROMPT", &"ODIN_RCS_PROMPT", ::odin_rcs_prompt ); maps\_utility::add_hint_string( "SATELLITE_TIMEOUT", &"ODIN_SATELLITE_TIMEOUT" ); } odin_rcs_prompt() { if ( level.player usebuttonpressed() ) return 1; else return 0; } satellite_main() { common_scripts\utility::flag_set( "trigger_spacejump" ); common_scripts\utility::flag_set( "stop_wall_pushing" ); thread maps\_utility::autosave_by_name( "satellite_begin" ); thread satellite_dialogue(); thread ending_setup(); thread thor_pod_opens(); common_scripts\utility::flag_set( "animated_sequence_complete" ); satellite_setup(); common_scripts\utility::flag_wait( "satellite_end_anim_started" ); level thread maps\odin_fx::fx_burnup(); maps\_utility::delaythread( 25, ::fade_out_show_title ); wait 31.97; common_scripts\utility::flag_set( "satellite_clear" ); if ( !isdefined( level.prologue ) || isdefined( level.prologue ) && level.prologue == 0 ) { common_scripts\utility::flag_set( "start_transition_to_youngblood" ); maps\_hud_util::fade_out( 2.0, "white" ); maps\_utility::nextmission(); } } fade_out_show_title() { if ( !isdefined( level.prologue ) || isdefined( level.prologue ) && level.prologue == 0 ) return; thread maps\_hud_util::fade_out( 7.0, "white" ); setblur( 5, 6 ); var_0 = maps\_hud_util::get_optional_overlay( "white" ); var_0.sort = 1; var_0.foreground = 0; wait 7.5; var_1 = getaiarray(); common_scripts\utility::array_call( var_1, ::delete ); var_2 = getentarray( "script_model", "classname" ); foreach ( var_4 in var_2 ) { if ( issubstr( var_4.model, "body_fed_space" ) ) var_4 delete(); } var_6 = getcorpsearray(); foreach ( var_8 in var_6 ) var_8 delete(); level.player thread maps\_utility::play_sound_on_entity( "logo_whoosh_lr" ); wait 0.25; setblur( 0, 0.05 ); common_scripts\utility::flag_set( "start_transition_to_youngblood" ); } satellite_setup() { thread maps\_space_player::player_location_check( "exterior" ); } satellite_dialogue() { wait 1; if ( !common_scripts\utility::flag( "jumpTo_dialogue_skip" ) ) { maps\_utility::smart_radio_dialogue( "odin_kyr_atlasmainhowmany" ); maps\_utility::smart_radio_dialogue( "odin_atl_23degreesportor" ); maps\_utility::smart_radio_dialogue( "odin_kyr_23degreeswelldumpthat" ); } common_scripts\utility::flag_wait( "outline_rcs_lines" ); level.ally maps\_space_ai::smart_radio_dialogue_facial( "odin_kyr_hurryandhelpme", "odin_kyr_hurryandhelpme" ); common_scripts\utility::flag_wait( "triggered_finale" ); common_scripts\utility::flag_clear( "hold_satellite_back_thrusters" ); wait 4; maps\_utility::smart_radio_dialogue( "odin_kyr_coversoffhouston" ); maps\_utility::smart_radio_dialogue( "odin_shq_ignitethosercsfuel" ); if ( !common_scripts\utility::flag( "player_has_fired" ) ) level.ally maps\_space_ai::smart_radio_dialogue_facial( "odin_kyr_youheardhimbud", "odin_kyr_youheardhimbud" ); common_scripts\utility::flag_wait( "first_finale_stage_done" ); maps\_utility::smart_radio_dialogue( "odin_kyr_shit" ); common_scripts\utility::flag_wait( "satellite_end_anim_started" ); wait 0.4; maps\_utility::smart_radio_dialogue( "odin_kyr_ughh" ); maps\_utility::smart_radio_dialogue( "odin_shq_1523" ); maps\_utility::smart_radio_dialogue( "odin_ho2_23degrees" ); wait 0.3; maps\_utility::smart_radio_dialogue( "odin_shq_30degreesofaxis" ); wait 0.5; wait 0.5; maps\_utility::smart_radio_dialogue( "odin_shq_specialistmosleykyra" ); } ally_movement_logic() { level.ally maps\_utility::set_goal_radius( 8 ); var_0 = []; for ( var_1 = 0; var_1 < 5; var_1++ ) var_0[var_1] = getnode( "ally_sat_trail_" + var_1, "targetname" ); level.ally setgoalnode( var_0[0] ); level.ally waittill( "goal" ); level.ally setgoalnode( var_0[1] ); common_scripts\utility::flag_wait( "player_trail_0" ); level.ally setgoalnode( var_0[4] ); level.ally waittill( "goal" ); } player_movement_check() { } tube_rip_sequence() { common_scripts\utility::flag_wait( "animated_sequence_complete" ); level.player unlink(); level.player enableweapons(); thread push_player_back_from_thor(); } push_player_back_from_thor() { var_0 = getent( "player_tube_rip_node", "targetname" ); var_1 = 0; var_2 = getnode( "ally_final_node", "targetname" ); level.ally maps\_utility::set_goal_node( var_2 ); while ( var_1 == 0 ) { common_scripts\utility::flag_set( "clear_to_tweak_player" ); var_3 = distance( level.player.origin, var_0.origin ); if ( var_3 >= 0 && var_3 <= 256 ) setsaveddvar( "player_swimWaterCurrent", ( 6000, 0, 6000 ) ); if ( var_3 >= 257 && var_3 <= 320 ) setsaveddvar( "player_swimWaterCurrent", ( 5000, 0, 5000 ) ); if ( var_3 >= 321 && var_3 <= 384 ) setsaveddvar( "player_swimWaterCurrent", ( 4000, 0, 4000 ) ); if ( var_3 >= 385 && var_3 <= 512 ) setsaveddvar( "player_swimWaterCurrent", ( 3000, 0, 3000 ) ); if ( var_3 >= 513 && var_3 <= 640 ) setsaveddvar( "player_swimWaterCurrent", ( 1500, 0, 2000 ) ); if ( var_3 >= 641 ) { setsaveddvar( "player_swimWaterCurrent", ( 0, 0, 1000 ) ); wait 1; setsaveddvar( "player_swimWaterCurrent", ( 0, 0, 0 ) ); common_scripts\utility::flag_clear( "clear_to_tweak_player" ); var_1 = 1; } wait 0.1; } } thor_finale_movement( var_0 ) { var_1 = maps\odin_util::satellite_get_script_mover(); var_1 unlink(); var_2 = getent( "sat_barrel_target", "script_noteworthy" ); var_2 unlink(); var_3 = getentarray( "spacejump_sat", "targetname" ); var_4 = 700 - var_0 / 5; if ( var_4 < 20 ) var_4 = 20; var_1 moveto( var_2.origin, var_4, 0, 0 ); var_1 rotateto( ( 0, 30, 0 ), var_4 * 0.1, 0, 0 ); var_5 = 0 - var_0 * 2; common_scripts\utility::flag_set( "clear_to_tweak_player" ); if ( var_5 < -5000 ) var_5 = -5000; setsaveddvar( "player_swimWaterCurrent", ( var_5, 0, var_5 ) ); } sat_location_check( var_0 ) { level endon( "start_transition_to_youngblood" ); var_1 = getent( "sat_barrel_bottom", "script_noteworthy" ); var_2 = var_1.origin[2] - 3500; var_3 = var_1.origin[2] - 500; var_4 = var_1.origin[2] - 2000; var_5 = getentarray( "spacejump_sat", "targetname" ); var_6 = 0; var_7 = 0; var_8 = 0; while ( var_6 == 0 ) { if ( var_3 > var_1.origin[2] && var_7 == 0 ) { var_9 = getentarray( "first_to_explode", "script_noteworthy" ); thread sat_exploder( var_9, 0.4 ); var_7 = 1; earthquake( 0.05, 200, level.player.origin, 2000 ); } if ( var_4 > var_1.origin[2] && var_8 == 0 ) { common_scripts\utility::flag_set( "damage_line_3" ); var_8 = 1; earthquake( 0.15, 200, level.player.origin, 2000 ); common_scripts\utility::flag_set( "satellite_clear" ); } if ( var_2 > var_1.origin[2] ) { thread sat_exploder( var_5, 0 ); earthquake( 0.25, 200, level.player.origin, 2000 ); var_6 = 1; } wait 0.25; } } sat_exploder( var_0, var_1 ) { foreach ( var_3 in var_0 ) { if ( isdefined( var_3.script_parameters ) && var_3.script_parameters == "do_not_explode" ) continue; if ( var_3.classname == "script_model" || var_3.classname == "script_brushmodel" && var_3.classname != "script_origin" ) var_3 unlink(); } foreach ( var_3 in var_0 ) { if ( isdefined( var_3.script_parameters ) && var_3.script_parameters == "do_not_explode" ) { var_3 thread satellitepieceburnup( var_3 ); continue; } if ( var_3.classname == "script_model" || var_3.classname == "script_brushmodel" && var_3.classname != "script_origin" ) { wait( randomfloatrange( 0.1, 0.4 ) ); thread satellitepieceburnup( var_3 ); var_3 unlink(); var_6 = randomfloatrange( -1000, 3000 ); var_7 = randomfloatrange( -3000, 3000 ); var_8 = randomfloatrange( 2000, 10000 ); var_9 = var_3.origin[0] + var_6; var_10 = var_3.origin[1] + var_7; var_11 = var_3.origin[2] + var_8; var_12 = randomfloatrange( 20, 40 ); var_13 = randomfloatrange( 2, 4 ); var_14 = randomfloatrange( -1080, 1080 ); var_15 = randomintrange( 1, 3 ); switch ( var_15 ) { case 1: var_3 rotateroll( var_14, var_12, var_12 * 0.25, var_12 * 0.25 ); break; case 2: var_3 rotatepitch( var_14, var_12, var_12 * 0.25, var_12 * 0.25 ); break; case 3: var_3 rotateyaw( var_14, var_12, var_12 * 0.25, var_12 * 0.25 ); break; default: var_3 rotateroll( var_14, var_12, var_12 * 0.25, var_12 * 0.25 ); break; } var_3 moveto( ( var_9, var_10, var_11 ), var_12, 0, var_12 * 0.25 ); wait( var_1 ); } } } satellitepieceburnup( var_0 ) { if ( var_0.classname != "script_brushmodel" && var_0.model != "iss_sail_center" && var_0.model != "fah_sidewalk_tubes_01" && var_0.model != "clk_fusebox_01" ) { thread maps\odin_audio::sfx_distant_explo( var_0 ); wait( randomfloatrange( 1, 10 ) ); switch ( randomintrange( 0, 2 ) ) { case 0: playfxontag( level._effect["spc_explosion_240"], var_0, "tag_origin" ); break; case 1: playfxontag( level._effect["spc_explosion_1200"], var_0, "tag_origin" ); break; } } } rod_firing_sfx() { var_0 = getent( "origin_satellite_waypoint", "targetname" ); thread maps\odin_audio::sfx_odin_rog_close( var_0 ); thread maps\odin_audio::sfx_distant_explo( var_0 ); wait 0.6; thread maps\odin_audio::sfx_distant_explo( var_0 ); wait 0.5; thread maps\odin_audio::sfx_distant_explo( var_0 ); wait 0.4; thread maps\odin_audio::sfx_distant_explo( var_0 ); wait 0.3; thread maps\odin_audio::sfx_distant_explo( var_0 ); wait 0.2; thread maps\odin_audio::sfx_distant_explo( var_0 ); wait 0.1; thread maps\odin_audio::sfx_distant_explo( var_0 ); wait 0.3; thread maps\odin_audio::sfx_distant_explo( var_0 ); wait 0.3; thread maps\odin_audio::sfx_distant_explo( var_0 ); wait 0.3; thread maps\odin_audio::sfx_distant_explo( var_0 ); wait 0.3; thread maps\odin_audio::sfx_distant_explo( var_0 ); wait 0.3; thread maps\odin_audio::sfx_distant_explo( var_0 ); } thor_pod_opens() { level endon( "start_transition_to_youngblood" ); var_0 = getentarray( "pod_that_opens_0", "script_noteworthy" ); var_1 = getentarray( "pod_that_opens_1", "script_noteworthy" ); var_2 = getentarray( "pod_that_opens_2", "script_noteworthy" ); var_3 = getent( "pod_that_opens_origin_0", "script_noteworthy" ); var_4 = getent( "pod_that_opens_origin_1", "script_noteworthy" ); var_5 = getent( "pod_that_opens_origin_2", "script_noteworthy" ); var_6 = getent( "pod_cover_target_0", "script_noteworthy" ); var_7 = getent( "pod_cover_target_1", "script_noteworthy" ); var_8 = getent( "pod_cover_target_2", "script_noteworthy" ); foreach ( var_10 in var_0 ) { if ( var_10.classname == "script_brushmodel" ) var_10 linkto( var_3 ); } foreach ( var_10 in var_1 ) { if ( var_10.classname == "script_brushmodel" ) var_10 linkto( var_4 ); } foreach ( var_10 in var_2 ) { if ( var_10.classname == "script_brushmodel" ) var_10 linkto( var_5 ); } common_scripts\utility::flag_wait( "new_pod_opens" ); thread pod_two_spools_up(); thread thor_pod_opens_fx(); wait 3; var_3 moveto( var_6.origin, 15, 0, 10 ); var_4 moveto( var_7.origin, 15, 0, 10 ); var_5 moveto( var_8.origin, 15, 0, 10 ); var_5 rotatepitch( -30, 44, 0, 25 ); wait 6; var_3 moveto( var_6.origin, 40, 0, 25 ); var_4 moveto( var_7.origin, 40, 0, 25 ); var_5 moveto( var_7.origin, 40, 0, 25 ); var_3 rotateroll( -25, 44, 0, 25 ); var_4 rotateyaw( -30, 44, 0, 25 ); } thor_pod_opens_fx() { common_scripts\utility::exploder( "pod_open_warning" ); wait 3.0; common_scripts\utility::exploder( "pod_open" ); maps\_utility::stop_exploder( "pod_open_warning" ); } pod_two_spools_up() { var_0 = []; var_1 = []; var_2 = 0; for ( var_3 = 0; var_3 < 16; var_3++ ) { var_4 = getent( "second_firing_rod_array_" + var_3, "script_noteworthy" ); var_0[var_3] = var_4; } while ( !common_scripts\utility::flag( "damage_line_3" ) ) { foreach ( var_6 in var_0 ) { var_1[var_2] = var_6.origin; var_2 = var_2 + 1; } var_2 = 0; foreach ( var_6 in var_0 ) { if ( var_2 != 15 ) { var_9 = var_2 + 1; var_6 moveto( var_1[var_9], 8, 0, 0 ); var_2 = var_9; continue; } var_9 = 0; var_6 moveto( var_1[var_9], 8, 0, 0 ); var_2 = 0; } wait 8; } } stop_player_backtracking( var_0 ) { if ( level.start_point == "odin_satellite" ) wait 3; common_scripts\utility::flag_wait( "landed_on_satellite" ); while ( !common_scripts\utility::flag( "triggered_finale" ) ) { var_1 = distance2d( level.player.origin, var_0.origin ); if ( var_1 >= 384 ) { var_2 = maps\odin_util::factor_value_min_max( 0, 10000, maps\odin_util::normalize_value( 0, 1024, var_1 - 384 ) ); var_2 = var_2 * -1; setsaveddvar( "player_swimWaterCurrent", ( var_2, 0, 0 ) ); } else setsaveddvar( "player_swimWaterCurrent", ( 0, 0, 0 ) ); wait 0.1; } } ending_setup() { common_scripts\utility::flag_set( "stop_tweaking_player" ); thread ally_finale_movement_setup(); common_scripts\utility::flag_wait( "lgt_flag_spin_over" ); var_0 = getent( "sat_top_collision", "script_noteworthy" ); var_1 = level.odin_animnode; var_2 = maps\_utility::spawn_anim_model( "player_rig" ); level.sat_ent_del[level.sat_ent_del.size] = var_2; var_3 = level.animated_sat_part["odin_sat_cover_01"]; thread stop_player_backtracking( var_3 ); var_4 = []; var_4["player_rig"] = var_2; var_4["odin_ally"] = level.ally; wait 0.05; level.animated_sat_part["odin_sat_cover_01"] linkto( var_1 ); level.animated_sat_part["odin_sat_section_01"] linkto( var_1 ); common_scripts\utility::flag_wait( "kickoff_player_finale" ); thread maps\odin_audio::sfx_sat_approach_plr(); level.player freezecontrols( 1 ); var_5 = 0; var_2 hide(); level.player disableweapons(); var_1 maps\_anim::anim_first_frame_solo( var_2, "satellite_end_start" ); level.player playerlinktoblend( var_2, "tag_player", 1.5, 0.5, 0 ); wait 1.5; level.player takeallweapons(); level.player enableweapons(); level.player playerlinktodelta( var_2, "tag_player", 1, var_5, var_5, var_5, var_5, 1 ); var_2 show(); level notify( "player_is_animating_to_sat" ); thread maps\odin_audio::sfx_sat_approach_kyra(); var_1 maps\_anim::anim_single_solo( var_2, "satellite_end_start" ); thread give_player_new_ref_ent_look( var_2, 25, 1 ); var_1 thread maps\_anim::anim_loop_solo( var_2, "satellite_end_start_loop", "stop_loops" ); var_4["odin_top_cover"] = level.animated_sat_part["odin_sat_cover_01"]; common_scripts\utility::flag_set( "outline_rcs_lines" ); thread maps\odin_audio::sfx_switch_ambzone_to_end(); common_scripts\utility::flag_set( "end_ally_loop_anims" ); wait 0.05; level.ally linkto( var_1 ); thread player_took_too_long_to_open( var_3 ); common_scripts\utility::flag_wait( "ally_at_sat" ); var_3 setcursorhint( "HINT_NOICON" ); var_3 sethintstring( &"ODIN_RCS_PROMPT" ); var_3 makeusable(); var_3 waittill( "trigger", var_6 ); level.player springcamdisabled( 3 ); thread maps\odin_audio::sfx_rcs_open(); var_1 notify( "stop_loops" ); var_5 = 0; level.player lerpviewangleclamp( 3, 0, 0, var_5, var_5, var_5, var_5 ); common_scripts\utility::flag_set( "triggered_finale" ); thread finale_always_be_reloading(); var_3 makeunusable(); var_0 delete(); setsaveddvar( "hud_showstance", 0 ); setsaveddvar( "ammoCounterHide", 1 ); common_scripts\utility::flag_set( "reset_ground_to_zip" ); var_1 maps\_anim::anim_single( var_4, "satellite_end_cover_lift" ); level.player playersetgroundreferenceent( undefined ); thread odin_finale( var_3, var_2 ); } give_player_new_ref_ent_look( var_0, var_1, var_2 ) { var_3 = common_scripts\utility::spawn_tag_origin(); level.player playersetgroundreferenceent( var_3 ); var_3 rotateto( var_0 gettagangles( "tag_player" ), var_2, 0, 0 ); wait( var_2 ); level.player freezecontrols( 0 ); level.player playersetgroundreferenceent( var_3 ); var_3 linkto( var_0 ); level.player playerlinktodelta( var_0, "tag_player", 1, var_1, var_1, var_1, var_1, 1 ); wait 0.1; level.player springcamenabled( 1.0, 3.2, 1.6 ); common_scripts\utility::flag_wait( "reset_ground_to_zip" ); wait 3; var_3 unlink(); var_3 rotateto( ( 0, 0, 0 ), 1, 0, 0 ); common_scripts\utility::flag_wait( "ref_ent_for_explosion" ); var_3.angles = level.player getplayerangles(); level.player playersetgroundreferenceent( var_3 ); var_3 rotateto( var_0 gettagangles( "tag_player" ), var_2, 0, 0 ); wait( var_2 ); var_3 linkto( var_0 ); common_scripts\utility::flag_wait( "mus_atmosphere" ); var_3 unlink(); while ( !common_scripts\utility::flag( "start_transition_to_youngblood" ) ) { var_3.angles = var_0 gettagangles( "tag_player" ); wait 0.05; } level.player playersetgroundreferenceent( undefined ); } finale_always_be_reloading() { while ( !common_scripts\utility::flag( "satellite_end_anim_started" ) ) { level.player setweaponammostock( level.player.weapon_exterior, 0 ); level.player setweaponammoclip( level.player.weapon_exterior, 32 ); wait 0.5; } } ally_finale_movement_setup() { thread ally_gun(); level.ally maps\_utility::set_goal_radius( 1 ); common_scripts\utility::flag_wait( "disable_kyra_leader" ); level.ally.moveplaybackrate = 1; level.ally maps\_utility::disable_ai_color(); level.ally setgoalpos( ( -9912, -3792, 65746 ) ); ally_first_frame_check(); level.odin_animnode maps\_anim::anim_single_solo( level.ally, "satellite_end_start" ); common_scripts\utility::flag_set( "ally_at_sat" ); level.odin_animnode maps\_anim::anim_loop_solo( level.ally, "satellite_end_start_loop", "stop_loops" ); } ally_first_frame_check() { level endon( "player_is_animating_to_sat" ); level.ally waittill( "goal" ); level.ally.moveplaybackrate = 1; level.odin_animnode maps\_anim::anim_reach_solo( level.ally, "satellite_end_start" ); } ally_gun() { common_scripts\utility::flag_wait( "show_ally_finale_gun_prop" ); var_0 = level.odin_animnode; var_1 = maps\_utility::spawn_anim_model( "finale_gun" ); level.sat_ent_del[level.sat_ent_del.size] = var_1; var_0 maps\_anim::anim_first_frame_solo( var_1, "satellite_end_start" ); var_0 maps\_anim::anim_single_solo( var_1, "satellite_end_start" ); var_0 thread maps\_anim::anim_loop_solo( var_1, "satellite_end_start_gun_loop", "stop_gun" ); common_scripts\utility::flag_wait( "hide_ally_finale_gun_prop" ); var_1 hide(); var_0 notify( "stop_gun" ); wait 0.05; var_1 delete(); } ally_gun_hide( var_0 ) { common_scripts\utility::flag_set( "hide_ally_finale_gun_prop" ); level.ally maps\_utility::gun_recall(); } ally_gun_show( var_0 ) { common_scripts\utility::flag_set( "show_ally_finale_gun_prop" ); level.ally maps\_utility::gun_remove(); } ally_finale_logic( var_0 ) { var_1 = getent( "ally_shooting_target", "script_noteworthy" ); wait 2; while ( !common_scripts\utility::flag( "first_finale_stage_done" ) ) { var_2 = randomfloatrange( 0.1, 0.4 ); level.ally shoot( 1, var_1.origin, 1 ); wait 0.05; level.ally shoot( 1, var_1.origin, 1 ); wait 0.05; level.ally shoot( 1, var_1.origin, 1 ); wait( var_2 ); } } odin_finale( var_0, var_1 ) { thread solar_panel_handling(); level.ally maps\_utility::stop_magic_bullet_shield(); var_2 = level.odin_animnode; var_2 notify( "stop_loop" ); var_3 = level.odin_animnode; var_4 = maps\_utility::spawn_anim_model( "finale_gun" ); level.sat_ent_del[level.sat_ent_del.size] = var_4; var_5 = 25; var_6 = getent( "sat_thruster_pipe_target", "script_noteworthy" ); level.ally maps\_utility::disable_ai_color(); level.ally unlink(); var_7 = []; var_7["player_rig"] = var_1; var_7["odin_ally"] = level.ally; var_7["odin_top_cover"] = level.animated_sat_part["odin_sat_cover_01"]; var_7["odin_top"] = level.animated_sat_part["odin_sat_section_01"]; var_8 = []; var_8["finale_gun"] = var_4; thread damage_fx_handling(); thread ally_finale_logic( var_0 ); level.player giveweapon( level.player.weapon_exterior ); level.player switchtoweaponimmediate( level.player.weapon_exterior ); level.player playerlinktodelta( var_1, "tag_player", 1, var_5, var_5, 16, 8, 1 ); var_2 thread maps\_anim::anim_loop( var_7, "satellite_end_shoot_01", "stop_loop" ); waittill_damage_done( 1800, 15 ); var_2 notify( "stop_loop" ); var_7["wires"] = maps\_utility::spawn_anim_model( "wires" ); level.sat_ent_del[level.sat_ent_del.size] = var_7["wires"]; var_7["wires2"] = maps\_utility::spawn_anim_model( "wires2" ); level.sat_ent_del[level.sat_ent_del.size] = var_7["wire2"]; var_7["wires3"] = maps\_utility::spawn_anim_model( "wires3" ); level.sat_ent_del[level.sat_ent_del.size] = var_7["wires3"]; var_7["wires4"] = maps\_utility::spawn_anim_model( "wires4" ); level.sat_ent_del[level.sat_ent_del.size] = var_7["wires4"]; var_7["wires5"] = maps\_utility::spawn_anim_model( "wires5" ); level.sat_ent_del[level.sat_ent_del.size] = var_7["wires5"]; level.ally notify( "styptic" ); var_6 setmodel( "odin_thruster_pipes_damaged" ); thread explosion_1(); var_4 hide(); level.player takeallweapons(); level.ally maps\_utility::gun_remove(); wait 0.05; common_scripts\utility::flag_set( "first_finale_stage_done" ); thread first_explosion_fx(); thread maps\odin_audio::sfx_sat_first_explosion(); common_scripts\utility::flag_set( "ref_ent_for_explosion" ); var_2 maps\_anim::anim_single( var_7, "satellite_end_explosion_01" ); level.player giveweapon( level.player.weapon_exterior ); level.player switchtoweaponimmediate( level.player.weapon_exterior ); level.player playerlinktodelta( var_1, "tag_player", 1, 20, -15, 40, 40, 1 ); var_2 thread maps\_anim::anim_loop( var_7, "satellite_end_shoot_02", "stop_loop" ); waittill_damage_done( 900, 5 ); thread maps\odin_audio::sfx_sat_second_explosion(); var_2 notify( "stop_loop" ); level.ally setmodel( "us_space_a_body_cracked" ); thread fx_for_kyra_helmet_cracking(); thread explosion_1(); common_scripts\utility::flag_set( "mus_atmosphere" ); maps\_utility::autosave_by_name_silent( "Odin_completed" ); var_9 = getentarray( "sat_ROGS", "script_noteworthy" ); var_9[0] hide(); var_10 = getentarray( "spacejump_sat", "targetname" ); foreach ( var_12 in var_9 ) var_12 linkto( level.animated_sat_part["odin_sat_section_04_base"] ); foreach ( var_15 in var_10 ) var_15 linkto( level.animated_sat_part["odin_sat_section_04_base"] ); thread handle_finale_shakes_and_rumbles( var_1 ); var_4 show(); var_0 hide(); level.player takeallweapons(); var_2 thread maps\_anim::anim_single( var_8, "satellite_end_explosion_01_gun" ); var_2 thread maps\_anim::anim_single( var_7, "satellite_end_explosion_02" ); var_17 = maps\_utility::spawn_anim_model( "sat_body" ); level.sat_ent_del[level.sat_ent_del.size] = var_17; var_17 hide(); var_5 = 30; level.player playerlinktodelta( var_1, "tag_player", 1, var_5, 0, var_5, 20, 1 ); level.player springcamenabled( 1.0, 3.2, 1.6 ); var_2 maps\_anim::anim_first_frame_solo( var_17, "satellite_end_explosion_02_Sat" ); wait 0.05; level.odin_animnode notify( "stop_sat_loops" ); level.animated_sat_part["odin_sat_section_03_rot"] = getent( "odin_sat_section_03_rot", "script_noteworthy" ); var_2 maps\_anim::anim_first_frame( level.animated_sat_part, "satellite_end_explosion_02" ); wait 0.05; var_2 thread maps\_anim::anim_single( level.animated_sat_part, "satellite_end_explosion_02" ); var_2 thread maps\_anim::anim_single_solo( var_17, "satellite_end_explosion_02_Sat" ); thread finale_fx_handling( var_17 ); common_scripts\utility::flag_set( "satellite_end_anim_started" ); level notify( "finale_completed" ); var_18 = maps\odin_util::earth_get_script_mover(); var_19 = getent( "space_mover", "targetname" ); var_19 linkto( var_18 ); var_18 unlink(); var_18 movex( 1200, 15, 5, 0 ); wait 10; var_18 movex( 3500, 15, 5, 0 ); } fx_for_kyra_helmet_cracking() { playfxontag( level._effect["vfx_kyra_impact_head_space_blood"], level.ally, "tag_eye" ); wait 0.2; playfxontag( level._effect["vfx_kyra_impact_head_space_blood"], level.ally, "tag_eye" ); wait 0.2; playfxontag( level._effect["vfx_kyra_impact_head_space_blood"], level.ally, "tag_eye" ); wait 0.2; playfxontag( level._effect["vfx_kyra_impact_head_space_blood"], level.ally, "tag_eye" ); wait 0.2; playfxontag( level._effect["vfx_kyra_impact_head_space_blood"], level.ally, "tag_eye" ); wait 0.8; playfxontag( level._effect["vfx_kyra_impact_head_space_blood"], level.ally, "tag_eye" ); wait 0.5; for ( var_0 = 0; var_0 < 30; var_0++ ) { playfxontag( level._effect["vfx_kyra_impact_head_space"], level.ally, "tag_eye" ); wait( randomfloatrange( 0.05, 0.13 ) ); } } solar_panel_handling() { level thread maps\odin_sat_section_02_solar_panels_destruction::spawnsolarpanelsinit( 1 ); common_scripts\utility::flag_wait( "mus_atmosphere" ); var_0 = getentarray( "dummy_starter_solar", "script_noteworthy" ); foreach ( var_2 in var_0 ) var_2 hide(); foreach ( var_5 in level.frames ) { foreach ( var_2 in var_5.panel_array ) var_2 show(); } wait 2; level thread maps\odin_sat_section_02_solar_panels_destruction::destructisolarpanelsinit( "odin_sat_section_02_solar_wing_04", 4, 0 ); wait 1; level thread maps\odin_sat_section_02_solar_panels_destruction::destructisolarpanelsinit( "odin_sat_section_02_solar_wing_02", 4, 0 ); wait 0.5; level thread maps\odin_sat_section_02_solar_panels_destruction::destructisolarpanelsinit( "odin_sat_section_02_solar_wing_01", 4, 0 ); wait 1.5; level thread maps\odin_sat_section_02_solar_panels_destruction::destructisolarpanelsinit( "odin_sat_section_02_solar_wing_03", 26, 1 ); } explosion_1() { level.player playrumbleonentity( "heavy_1s" ); } #using_animtree("player"); handle_finale_shakes_and_rumbles( var_0 ) { level endon( "start_transition_to_youngblood" ); var_1 = 0; for (;;) { var_2 = var_0 getanimtime( %odin_satellite_end_explosion_02_player ); if ( var_2 >= 0 && var_2 < 0.25 ) { var_3 = randomfloatrange( 1, 5 ); if ( var_3 <= 2 ) { level.player playrumbleonentity( "light_1s" ); wait( randomfloatrange( 0.5, 0.9 ) ); } earthquake( 0.025, 1, level.player.origin, 2000 ); } if ( var_2 >= 0.25 && var_2 < 0.5 ) { var_3 = randomfloatrange( 1, 5 ); if ( var_3 <= 2 ) { level.player playrumbleonentity( "light_1s" ); wait( randomfloatrange( 0.5, 0.9 ) ); } earthquake( 0.05, 1, level.player.origin, 2000 ); } if ( var_2 >= 0.5 && var_2 < 0.75 ) { var_3 = randomfloatrange( 1, 5 ); if ( var_1 <= 10 ) var_3 = 4; if ( var_3 == 3 ) { level.player playrumbleonentity( "heavy_1s" ); wait 0.75; } else if ( var_3 == 1 ) wait 0.55; else level.player playrumbleonentity( "light_1s" ); earthquake( 0.1, 1, level.player.origin, 2000 ); var_1 = var_1 + 1; } if ( var_2 >= 0.75 && var_2 < 1 ) { var_3 = randomfloatrange( 1, 5 ); if ( var_3 == 3 || var_3 == 4 ) { level.player playrumbleonentity( "heavy_1s" ); wait 0.75; } else if ( var_3 == 1 ) wait 0.55; else level.player playrumbleonentity( "light_1s" ); earthquake( 0.15, 1, level.player.origin, 2000 ); } if ( var_2 == 1 ) break; wait 0.25; } } first_explosion_fx() { maps\odin_fx::fx_sat_rcs_damage_kill(); var_0 = getent( "ally_shooting_target", "script_noteworthy" ); var_1 = var_0.origin; var_2 = anglestoforward( var_0.angles ); var_3 = anglestoup( var_0.angles ); playfx( level._effect["spc_explosion_240"], var_1 ); wait 1; var_4 = spawnfx( level._effect["odin_sat_rcs_fuel_fire"], var_1, var_2, var_3 ); triggerfx( var_4 ); common_scripts\utility::flag_wait( "satellite_end_anim_started" ); var_4 delete(); for ( var_5 = 1; var_5 < 4; var_5++ ) { playfx( level._effect["spc_explosion_1200"], var_1 + common_scripts\utility::randomvector( 150 ) ); wait( randomfloatrange( 0.5, 1.2 ) ); } } finale_nags() { var_0 = gettime(); var_1 = var_0 - 900; var_2 = 0; var_3 = randomfloatrange( 5000, 10000 ); var_4 = []; var_4[0] = "Just shoot the RCS Module, Bud!"; var_4[1] = "Ensign! Shoot that module or there wont be anything left!"; var_4[2] = "Shoot the RCS! Hurry!"; var_4[3] = "It's going to fire that second payload if we don't destabilize it first!!"; var_4[4] = "Keep shooting, it's almost destabilized!"; var_4[5] = "We're too late... The second Payload is firing."; while ( !common_scripts\utility::flag( "first_finale_stage_done" ) ) { var_1 = gettime() - var_3; if ( var_1 >= var_0 ) { var_5 = randomintrange( 0, 3 ); if ( var_2 == var_5 ) var_5 = randomintrange( 0, 3 ); else { var_2 = var_5; iprintlnbold( "Kyra: " + var_4[var_5] ); var_0 = gettime(); var_3 = randomfloatrange( 5000, 10000 ); var_1 = var_0 - var_3; } } wait 0.01; } wait 3; iprintlnbold( "Kyra: " + var_4[4] ); wait 3; var_3 = randomfloatrange( 5000, 10000 ); while ( !common_scripts\utility::flag( "satellite_end_anim_started" ) ) { var_1 = gettime() - var_3; if ( var_1 >= var_0 ) { var_5 = randomintrange( 0, 3 ); if ( var_2 == var_5 ) var_5 = randomintrange( 0, 3 ); else { var_2 = var_5; iprintlnbold( "Kyra: " + var_4[var_5] ); var_0 = gettime(); var_3 = randomfloatrange( 5000, 10000 ); var_1 = var_0 - var_3; } } wait 0.01; } } waittill_damage_done( var_0, var_1 ) { level endon( "next_finale_stage" ); level endon( "thrusters_fully_damaged" ); level endon( "start_transition_to_youngblood" ); thread finale_timer( var_1 ); var_2 = 0; var_3 = getent( "sat_thruster_pipe_target", "script_noteworthy" ); var_4 = getent( "ally_shooting_target", "script_noteworthy" ); var_3 setcandamage( 1 ); while ( !common_scripts\utility::flag( "satellite_end_anim_started" ) ) { var_3 waittill( "damage", var_5, var_6, var_7, var_8, var_9 ); if ( var_6 == level.player ) { common_scripts\utility::flag_set( "player_has_fired" ); var_2 = var_2 + var_5; if ( var_2 >= var_0 ) { level notify( "next_finale_stage" ); common_scripts\utility::flag_clear( "player_has_fired" ); return; } } } } finale_timer( var_0 ) { level endon( "next_finale_stage" ); level endon( "start_transition_to_youngblood" ); var_1 = gettime(); var_2 = gettime() - var_0 * 1000; for (;;) { var_2 = gettime() - var_0 * 1000; if ( var_2 >= var_1 ) break; wait 0.05; } level notify( "next_finale_stage" ); } damage_fx_handling() { level endon( "start_transition_to_youngblood" ); level thread maps\odin_fx::fx_sat_thrusters_damage(); var_0 = getent( "sat_thruster_pipe_target", "script_noteworthy" ); var_1 = getent( "ally_shooting_target", "script_noteworthy" ); var_2 = common_scripts\utility::spawn_tag_origin(); level.sat_ent_del[level.sat_ent_del.size] = var_2; var_2.origin = var_1.origin; var_0 setcandamage( 1 ); level.fx_sat_rcs_damage = []; var_3 = 1; var_4 = 1; while ( !common_scripts\utility::flag( "satellite_end_anim_started" ) ) { var_0 waittill( "damage", var_5, var_6, var_7, var_8, var_9 ); if ( !common_scripts\utility::flag( "rcs_is_damaged" ) ) common_scripts\utility::flag_set( "rcs_is_damaged" ); if ( var_4 == 7 ) { maps\odin_fx::fx_sat_rcs_damage( var_3 ); var_3 = var_3 + 1; var_4 = 1; } else var_4 = var_4 + 1; if ( var_6 == level.player ) { if ( common_scripts\utility::flag( "first_finale_stage_done" ) ) { maps\odin_fx::fx_sat_rcs_damage_kill(); thread stop_finale_flames( var_2 ); break; } } } } stop_finale_flames( var_0 ) { common_scripts\utility::flag_wait( "satellite_end_anim_started" ); wait 3; stopfxontag( common_scripts\utility::getfx( "spc_fire_puff_bigger_light" ), var_0, "tag_origin" ); } finale_fx_handling( var_0 ) { level thread maps\odin_fx::fx_sat_explosion( var_0 ); var_1 = getentarray( "finale_fx_point", "script_noteworthy" ); var_2 = []; for ( var_3 = 0; var_3 < var_1.size; var_3++ ) { var_4 = common_scripts\utility::spawn_tag_origin(); level.sat_ent_del[level.sat_ent_del.size] = var_4; var_2[var_3] = var_4; var_4.origin = var_1[var_3].origin; var_4.angles = var_1[var_3].angles; var_4 unlink(); var_4 linkto( var_0 ); } foreach ( var_4 in var_1 ) var_4 delete(); var_7 = 3; var_8 = []; var_8[0] = "spc_explosion_1200"; var_8[1] = "spc_explosion_240"; while ( !common_scripts\utility::flag( "satellite_clear" ) ) { var_9 = randomintrange( 0, var_2.size ); var_10 = randomintrange( 0, var_8.size ); var_11 = randomfloatrange( 0.1, var_7 ); playfxontag( common_scripts\utility::getfx( var_8[var_10] ), var_2[var_9], "tag_origin" ); if ( var_10 == 0 ) { } wait( var_11 ); if ( var_7 >= 0.75 ) var_7 = var_7 - 0.5; } foreach ( var_4 in var_2 ) { foreach ( var_14 in var_8 ) stopfxontag( common_scripts\utility::getfx( var_14 ), var_4, "tag_origin" ); } } player_took_too_long_to_open( var_0 ) { var_1 = gettime(); var_2 = gettime() - 9000; var_3 = 0; var_4 = 4000; var_5 = []; var_5[0] = "odin_kyr_comeonbud"; var_5[1] = "odin_kyr_whatthehellare"; var_5[2] = "odin_kyr_budineedyour"; while ( !common_scripts\utility::flag( "triggered_finale" ) ) { var_2 = gettime() - var_4; if ( var_2 >= var_1 ) { if ( var_3 > 2 ) { var_0 hudoutlinedisable(); var_0 makeunusable(); thread maps\_utility::smart_radio_dialogue( "odin_shq_youretoolatebegin" ); wait 2.5; level notify( "new_quote_string" ); setdvar( "ui_deadquote", "@ODIN_SATELLITE_TIMEOUT" ); maps\_utility::missionfailedwrapper(); return; } level.ally maps\_space_ai::smart_radio_dialogue_facial( var_5[var_3], var_5[var_3] ); var_1 = gettime(); var_4 = var_4 + 2200; var_2 = gettime() - var_4; var_3 = var_3 + 1; } wait 0.01; } } cover_lift_rumble_1( var_0 ) { level.player playrumbleonentity( "light_1s" ); } cover_lift_rumble_2( var_0 ) { level.player playrumbleonentity( "light_3s" ); } satellite_cleanup( var_0 ) { if ( var_0 == 0 ) { common_scripts\utility::flag_wait( "clear_for_sat_clean" ); if ( isdefined( level.sat_ent_del ) ) { foreach ( var_2 in level.sat_ent_del ) { if ( isdefined( var_2 ) ) var_2 delete(); } } } }