iw6-scripts/maps/odin_satellite.gsc
2024-02-13 13:20:49 +01:00

1244 lines
40 KiB
Plaintext

// 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();
}
}
}
}