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

1041 lines
35 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
escape_start()
{
maps\odin_util::move_player_to_start_point( "start_odin_escape" );
wait 0.1;
maps\odin_util::actor_teleport( level.ally, "odin_escape_ally_tp" );
level.ally.animname = "odin_ally";
maps\odin_util::fx_odin_monitor_bink_init();
thread maps\odin_util::dynamic_object_pusher();
level.player thread maps\odin::give_weapons();
common_scripts\utility::flag_set( "ally_clear" );
common_scripts\utility::flag_set( "ally_out_of_z" );
thread crew_quarters_combat();
thread maps\odin_audio::sfx_play_alarms();
thread maps\odin_fx::satellite_rcs_thrusters();
maps\_utility::delaythread( 2, maps\odin_ally::post_z_push );
wait 1;
thread maps\odin_util::create_sliding_space_door( "z_hall_close_door", 1, 0, 0, 0, "lock_z_hall_close_door", "unlock_z_hall_close_door" );
common_scripts\utility::flag_set( "lock_z_hall_close_door" );
}
section_precache()
{
precacheitem( "odin_rod_missile" );
precachestring( &"ODIN_ADS_TIP" );
precachestring( &"ODIN_ESCAPE_DOOR_PROMPT" );
}
section_flag_init()
{
common_scripts\utility::flag_init( "escape_clear" );
common_scripts\utility::flag_init( "player_open_escape_door" );
common_scripts\utility::flag_init( "kyra_push_bag_anim" );
common_scripts\utility::flag_init( "window_VO_Done" );
common_scripts\utility::flag_init( "remove_window_blocker" );
common_scripts\utility::flag_init( "open_second_pod" );
common_scripts\utility::flag_init( "escape_blocker_door_trig" );
common_scripts\utility::flag_init( "clear_to_tweak_player" );
common_scripts\utility::flag_init( "lock_escape_window_auto_door" );
common_scripts\utility::flag_init( "unlock_escape_window_auto_door" );
common_scripts\utility::flag_init( "lock_z_hall_close_door" );
common_scripts\utility::flag_init( "lock_escape_door_blocker" );
common_scripts\utility::flag_init( "unlock_escape_door_blocker" );
common_scripts\utility::flag_init( "lock_spin_door_blocker" );
common_scripts\utility::flag_init( "unlock_spin_door_blocker" );
common_scripts\utility::flag_init( "escape_enc_activated" );
common_scripts\utility::flag_init( "cq_killer_dead" );
common_scripts\utility::flag_init( "enc_movement_token_taken" );
common_scripts\utility::flag_init( "esc_combat_done" );
common_scripts\utility::flag_init( "ready_to_fire_next_salvo" );
common_scripts\utility::flag_init( "fire_rog" );
common_scripts\utility::flag_init( "ally_at_console" );
common_scripts\utility::flag_init( "ally_console_scene_done" );
common_scripts\utility::flag_init( "destruction_sequence_started" );
common_scripts\utility::flag_init( "objective_escape_sat" );
common_scripts\utility::flag_init( "escape_overlap_dialogue" );
}
section_hint_string_init()
{
maps\_utility::add_hint_string( "escape_ADS_Hint", &"ODIN_ADS_TIP", ::hints_ads_escape );
maps\_utility::add_hint_string( "escape_door_prompt", &"ODIN_ESCAPE_DOOR_PROMPT", ::hints_ads_escape );
}
hints_ads_escape()
{
if ( common_scripts\utility::flag( "esc_combat_done" ) || level.player adsbuttonpressed() )
return 1;
else
return 0;
}
escape_main()
{
common_scripts\utility::flag_wait( "ally_clear" );
common_scripts\utility::flag_set( "unlock_escape_window_auto_door" );
setsaveddvar( "ammoCounterHide", "0" );
thread escape_combat_door();
escape_setup();
common_scripts\utility::flag_wait( "esc_combat_done" );
maps\_utility::autosave_by_name( "escape_combat_done" );
crew_quarters_aftermath();
thread early_decomp_checker();
ally_console_scene();
maps\_utility::autosave_by_name( "escape_window_done" );
if ( !common_scripts\utility::flag( "absolute_fire_decompression" ) )
destruction_sequence();
common_scripts\utility::flag_wait_all( "escape_clear", "player_exited_escape_hallway" );
escape_cleanup();
}
escape_combat_door()
{
level endon( "kyra_got_impatient" );
thread escape_no_push_zone();
var_0 = maps\_utility::spawn_anim_model( "space_square_hatch" );
var_0.targetname = "escape_door_to_open";
var_1 = getent( "player_escape_door_blocker", "targetname" );
var_2 = getent( "player_escape_door_blocker_origin", "targetname" );
var_3 = common_scripts\utility::getstruct( "kyra_move_node01", "targetname" );
var_3 maps\_anim::anim_first_frame_solo( var_0, "odin_escape_open_door_player" );
var_2 linkto( var_0, "tag_origin" );
var_1 linkto( var_2 );
common_scripts\utility::flag_wait( "esc_combat_done" );
common_scripts\utility::flag_clear( "clear_to_tweak_player" );
var_0 makeusable();
var_0 sethintstring( &"ODIN_ESCAPE_DOOR_PROMPT" );
var_0 waittill( "trigger" );
thread player_escape_door_open( var_3, var_0 );
var_0 makeunusable();
common_scripts\utility::flag_wait( "player_open_escape_door" );
var_3 maps\_anim::anim_single_solo( var_0, "odin_escape_open_door_player" );
common_scripts\utility::flag_set( "clear_to_tweak_player" );
var_1 delete();
var_2 delete();
}
escape_no_push_zone()
{
level endon( "escape_clear" );
wait 1;
while ( !common_scripts\utility::flag( "player_open_escape_door" ) )
{
if ( common_scripts\utility::flag( "player_at_escape_door" ) )
common_scripts\utility::flag_set( "no_push_zone" );
else
common_scripts\utility::flag_clear( "no_push_zone" );
wait 0.05;
}
}
escape_ally_movement_start()
{
level endon( "player_opened_escape_door" );
var_0 = common_scripts\utility::getstruct( "kyra_move_node01", "targetname" );
thread kyra_escape_move_bags( var_0 );
var_0 notify( "stop_loop" );
thread kyra_grabs_escape_gun( var_0 );
var_0 maps\_anim::anim_single_solo( self, "odin_escape_first_encounter_end_ally01" );
var_0 thread maps\_anim::anim_loop_solo( self, "odin_escape_first_encounter_end_loop_ally01", "stop_loop" );
thread maps\odin_util::finale_anim_loop_killer( var_0, "stop_loop" );
ally_wait_to_get_impatient( 4.5 );
common_scripts\utility::flag_waitopen( "player_at_escape_door" );
level notify( "kyra_got_impatient" );
var_0 notify( "stop_loop" );
var_1 = getent( "escape_door_to_open", "targetname" );
var_1 makeunusable();
level.ally.escape_bag_push = "odin_escape_zigzag_bag_02";
common_scripts\utility::flag_set( "kyra_push_bag_anim" );
thread maps\odin_util::push_out_of_doorway( "X", "<", 1000, 1000 );
var_0 thread maps\_anim::anim_single_solo( var_1, "odin_escape_zigzag_start_door" );
common_scripts\utility::flag_set( "clear_to_tweak_player" );
thread maps\odin_audio::sfx_kyra_open_station_door();
var_0 maps\_anim::anim_single_solo( self, "odin_escape_zigzag_start_ally01" );
thread escape_ally_movement_start_part_2( var_0 );
}
escape_ally_movement_start_part_2( var_0 )
{
level endon( "early_decomp" );
thread maps\odin_spin::prespawn_decomp_crates();
var_0 notify( "stop_loop" );
var_0 thread maps\_anim::anim_loop_solo( self, "odin_escape_zigzag_start_loop_ally01", "stop_loop" );
thread maps\odin_util::finale_anim_loop_killer( var_0, "stop_loop" );
common_scripts\utility::flag_wait( "escape_blocker_door_trig" );
var_0 notify( "stop_loop" );
var_0 = common_scripts\utility::getstruct( "kyra_move_node02", "targetname" );
var_0 maps\_anim::anim_single_solo( self, "odin_escape_zigzag_second_ally01" );
var_0 maps\_anim::anim_single_solo( self, "odin_escape_zigzag_to_spin_ally01" );
var_0 thread maps\_anim::anim_loop_solo( self, "odin_escape_zigzag_to_spin_loop_ally01", "stop_loop" );
thread maps\odin_util::finale_anim_loop_killer( var_0, "stop_loop" );
self setgoalpos( self.origin );
common_scripts\utility::flag_set( "escape_clear" );
self notify( "done_with_escape" );
common_scripts\utility::flag_wait( "start_near_explosion_sequence" );
var_0 notify( "stop_loop" );
}
kyra_grabs_escape_gun( var_0 )
{
level.ally maps\_utility::gun_remove();
var_1 = maps\_utility::spawn_anim_model( "kyra_gun" );
var_1 attach( "weapon_acog_iw6", "tag_acog_2", 1 );
var_1 attach( "weapon_barrel_shroud_iw6", "tag_silencer", 1 );
var_0 maps\_anim::anim_single_solo( var_1, "odin_escape_first_encounter_end_tar21" );
var_1 delete();
level.ally maps\_utility::gun_recall();
}
ally_wait_to_get_impatient( var_0 )
{
for ( var_1 = 0; var_1 < var_0; var_1++ )
{
if ( level.ally.origin[0] < level.player.origin[0] - 64 )
break;
wait 1;
}
}
kyra_escape_move_bags( var_0 )
{
var_1 = maps\_utility::spawn_anim_model( "space_escape_pack" );
var_0 maps\_anim::anim_first_frame_solo( var_1, "odin_escape_zigzag_bag_01" );
common_scripts\utility::flag_wait( "kyra_push_bag_anim" );
var_0 maps\_anim::anim_single_solo( var_1, level.ally.escape_bag_push );
}
player_escape_door_open( var_0, var_1 )
{
level endon( "kyra_got_impatient" );
level notify( "player_opened_escape_door" );
var_2 = maps\_utility::spawn_anim_model( "player_rig" );
var_2 hide();
var_0 maps\_anim::anim_first_frame_solo( var_2, "odin_escape_open_door_player" );
var_3 = 0;
thread maps\odin_audio::sfx_plr_open_station_door();
level.player disableweapons();
level.player playerlinktoblend( var_2, "tag_player", 0.5, 0, 0 );
wait 0.5;
level.player playerlinktodelta( var_2, "tag_player", 1, var_3, var_3, var_3, var_3, 1 );
thread escape_door_anim_player( var_0, var_2 );
var_0 notify( "stop_loop" );
level.ally.escape_bag_push = "odin_escape_zigzag_bag_01";
common_scripts\utility::flag_set( "kyra_push_bag_anim" );
var_0 maps\_anim::anim_single_solo( level.ally, "odin_escape_open_door_player" );
level.ally thread escape_ally_movement_start_part_2( var_0 );
}
escape_door_anim_player( var_0, var_1 )
{
var_2 = maps\_utility::spawn_anim_model( "finale_gun" );
var_2.origin = var_1 gettagorigin( "tag_weapon" );
var_2.angles = var_1 gettagangles( "tag_weapon" );
var_2 linkto( var_1, "tag_weapon" );
var_1 show();
var_0 maps\_anim::anim_single_solo( var_1, "odin_escape_open_door_player" );
common_scripts\utility::flag_clear( "no_push_zone" );
level.player unlink();
var_2 delete();
var_1 delete();
level.player enableweapons();
wait 1;
}
escape_door_open_rumble( var_0 )
{
level.player playrumbleonentity( "light_1s" );
}
escape_door_open_flag( var_0 )
{
common_scripts\utility::flag_set( "player_open_escape_door" );
}
escape_setup()
{
setsaveddvar( "ragdoll_max_life", 90000 );
thread maps\odin_util::floating_corpses( "floaters_zigzag_module" );
thread maps\odin_util::create_sliding_space_door( "post_z_door", 1.2, 0.1, 0, 0, "lock_post_z_room", "unlock_post_z_room" );
thread maps\odin_util::create_sliding_space_door( "escape_window_auto_door", 1.2, 0.1, 0, 0, "lock_escape_window_auto_door", "unlock_escape_window_auto_door" );
thread maps\odin_util::create_sliding_space_door( "escape_door_blocker", 1, 0, 0, 0, "lock_escape_door_blocker", "unlock_escape_door_blocker" );
thread maps\odin_util::create_sliding_space_door( "spin_door_blocker", 0.75, 0, 0, 0, "lock_spin_door_blocker", "unlock_spin_door_blocker" );
thread escape_blocker_door_lens_cap();
common_scripts\utility::flag_set( "unlock_escape_door_blocker" );
common_scripts\utility::flag_set( "unlock_spin_door_blocker" );
thread manage_earth( "show" );
var_0 = maps\odin_util::satellite_get_script_mover();
var_1 = getent( "escape_sat_orientation", "targetname" );
var_0 moveto( var_1.origin, 0.1, 0, 0 );
var_0 rotateto( var_1.angles, 0.1, 0, 0 );
wait 0.15;
thread prepare_odin_for_window_scene();
level.decomp_door = thread maps\odin_util::create_sliding_space_door( "spin_decomp_door", 0.3, 0.1, 0, 0, "lock_decomp_room", "open_decomp_room_door" );
}
prepare_odin_for_window_scene()
{
level.odin_animnode maps\_anim::anim_single( level.animated_sat_part, "sat_blossom_close" );
var_0 = [];
var_1 = [];
var_2 = [];
var_0["odin_sat_section_04_pod_doorR_01"] = level.animated_sat_part["odin_sat_section_04_pod_doorR_01"];
var_2["odin_sat_section_04_pod_doorR_02"] = level.animated_sat_part["odin_sat_section_04_pod_doorR_02"];
var_1["odin_sat_section_04_pod_doorR_03"] = level.animated_sat_part["odin_sat_section_04_pod_doorR_03"];
var_0["odin_sat_section_04_pod_doorR_04"] = level.animated_sat_part["odin_sat_section_04_pod_doorR_04"];
var_0["odin_sat_section_04_pod_doorL_01"] = level.animated_sat_part["odin_sat_section_04_pod_doorL_01"];
var_2["odin_sat_section_04_pod_doorL_02"] = level.animated_sat_part["odin_sat_section_04_pod_doorL_02"];
var_1["odin_sat_section_04_pod_doorL_03"] = level.animated_sat_part["odin_sat_section_04_pod_doorL_03"];
var_0["odin_sat_section_04_pod_doorL_04"] = level.animated_sat_part["odin_sat_section_04_pod_doorL_04"];
level.odin_animnode maps\_anim::anim_first_frame( var_0, "sat_blossom_open" );
level.odin_animnode maps\_anim::anim_first_frame( var_1, "sat_blossom_open" );
level.odin_animnode maps\_anim::anim_first_frame( var_2, "sat_blossom_open" );
level thread maps\odin_fx::fx_sat_doors_open( var_0 );
level.odin_animnode thread maps\_anim::anim_single( var_0, "sat_blossom_open" );
common_scripts\utility::flag_wait( "start_odin_firing_scene" );
level thread maps\odin_fx::fx_sat_doors_open( var_1 );
level.odin_animnode thread maps\_anim::anim_single( var_1, "sat_blossom_open" );
wait 5;
level thread maps\odin_fx::fx_sat_doors_open( var_2 );
level.odin_animnode thread maps\_anim::anim_single( var_2, "sat_blossom_open" );
}
escape_blocker_door_lens_cap()
{
var_0 = getent( "escape_door_blocker_lens_cap", "targetname" );
var_1 = getent( "escape_door_blocker_lens_cap_origin", "targetname" );
var_2 = var_1.origin;
var_0 linkto( var_1 );
var_1 moveto( ( 0, 0, 0 ), 0.1, 0, 0 );
var_0 hide();
common_scripts\utility::flag_wait( "lock_escape_door_blocker" );
var_1 moveto( var_2, 0.1, 0, 0 );
wait 1;
var_0 show();
}
crew_quarters_combat()
{
level.ally maps\_utility::set_ignoreall( 1 );
level.ally maps\_utility::gun_remove();
level.ally.ignoreme = 1;
common_scripts\utility::flag_set( "unlock_post_z_room" );
crew_quarters_combat_setup();
level.ally thread move_ally_into_cq();
wait 1.0;
thread set_flag_on_player_action( "escape_enc_activated" );
crew_quarters_crew_killed();
common_scripts\utility::flag_wait_all( "first_enc_dead", "cq_killer_dead" );
common_scripts\utility::flag_set( "esc_combat_done" );
common_scripts\utility::flag_set( "kyra_ally_vo_01" );
}
create_escape_doors()
{
}
move_ally_into_cq()
{
maps\_utility::delaythread( 3.0, maps\_utility::smart_radio_dialogue, "odin_kyr_budlookouttheres" );
common_scripts\utility::flag_wait( "ally_out_of_z" );
var_0 = common_scripts\utility::getstruct( "kyra_move_node01", "targetname" );
var_0 maps\_anim::anim_single_solo( self, "odin_escape_first_encounter_ally01" );
var_0 thread maps\_anim::anim_loop_solo( self, "odin_escape_first_encounter_loop_ally01", "stop_loop" );
thread maps\odin_util::finale_anim_loop_killer( var_0, "stop_loop" );
}
crew_quarters_crew_killed()
{
var_0 = getent( "cq_enc_enemy_killer", "script_noteworthy" );
var_1 = var_0 maps\odin_util::spawn_odin_actor_internal( 1 );
var_1 maps\_utility::forceuseweapon( level.player.weapon_interior, "primary" );
var_1 hidepart( "tag_silencer" );
var_2 = getent( "cq_killed_crew", "targetname" );
var_3 = var_2 maps\odin_util::spawn_odin_actor_internal( 1 );
var_3.team = "neutral";
var_1.ignoreall = 1;
var_1.animname = "odin_opfor";
var_1.allowdeath = 1;
var_1 thread maps\odin_util::odin_drop_weapon();
var_3.ignoreall = 1;
var_3.nodeathimpulse = 1;
var_3.animname = "odin_redshirt";
var_3 maps\_utility::gun_remove();
var_4 = common_scripts\utility::getstruct( "kyra_move_node01", "targetname" );
var_4 thread maps\_anim::anim_single_solo( var_1, "odin_escape_first_encounter_opfor" );
thread redshirt_cq_enc_handles( var_3, var_4 );
var_4 = getnode( "node_cq_enc_middle_middle", "targetname" );
if ( isalive( var_1 ) )
{
var_1.fixednode = 1;
var_1.ignoreall = 0;
var_1 setgoalpos( var_1.origin );
var_1.favoriteenemy = level.player;
}
while ( isalive( var_1 ) )
wait 0.01;
if ( isalive( var_3 ) )
var_3 kill();
wait 1.5;
for ( var_5 = 0; var_5 < 25; var_5++ )
{
physicsexplosionsphere( var_4.origin, 48, 32, 0.1 );
wait 0.05;
}
}
redshirt_cq_enc_handles( var_0, var_1 )
{
var_0 endon( "death" );
var_0.forceragdollimmediate = 1;
var_1 maps\_anim::anim_single_solo( var_0, "odin_escape_first_encounter_redshirt" );
wait 0.1;
if ( isalive( var_0 ) )
var_0 kill();
}
escape_destruct_boxes( var_0 )
{
var_1 = getscriptablearray( var_0, "targetname" );
foreach ( var_3 in var_1 )
{
wait( randomfloatrange( 0.2, 0.6 ) );
magicbullet( "microtar_space_interior+acogsmg_sp+spaceshroud_sp", var_3.origin + ( randomfloatrange( 1, 2 ), randomfloatrange( 1, 2 ), randomfloatrange( 1, 2 ) ), var_3.origin );
}
}
crew_quarters_combat_setup()
{
var_0 = getentarray( "cq_enc_enemies", "targetname" );
level.aenemies = [];
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
switch ( var_0[var_1].script_noteworthy )
{
case "cq_enc_enemy_00":
var_0[var_1] maps\_utility::add_spawn_function( ::escape_enemy_00_think );
break;
case "cq_enc_enemy_01":
var_0[var_1] maps\_utility::add_spawn_function( ::escape_enemy_01_think );
break;
case "cq_enc_enemy_02":
var_0[var_1] maps\_utility::add_spawn_function( ::escape_enemy_02_think );
break;
case "cq_enc_enemy_03":
var_0[var_1] maps\_utility::add_spawn_function( ::escape_enemy_03_think );
break;
}
level.cq_enemies[var_1] = var_0[var_1] maps\odin_util::spawn_odin_actor_internal( 1 );
}
}
cq_room_destruction()
{
level endon( "enter_window_scene" );
common_scripts\utility::flag_wait( "escape_enc_activated" );
var_0 = getent( "escape_crates_damage_check", "targetname" );
var_0 setcandamage( 1 );
var_0 waittill( "damage" );
var_1 = getentarray( "cq_dyn_cargo_01_static", "targetname" );
foreach ( var_3 in var_1 )
var_3 delete();
}
escape_enemy_setup()
{
self.ignoreall = 1;
self.moveplaybackrate = 1.0;
self.goalradius = 16;
thread maps\odin_util::odin_drop_weapon();
}
cq_combat_movement()
{
self endon( "stop_combat" );
self endon( "death" );
var_0 = getnodearray( "nodes_cq_enc", "script_noteworthy" );
for (;;)
{
wait( randomfloatrange( 0.5, 2.5 ) );
if ( common_scripts\utility::flag( "enc_movement_token_taken" ) )
common_scripts\utility::flag_waitopen_or_timeout( "enc_movement_token_taken", 4 );
if ( getaicount( "axis" ) == 1 )
{
self endon( "death" );
self.goalradius = 64;
for (;;)
{
self setgoalpos( level.player.origin );
wait 2.0;
}
continue;
}
var_1 = var_0[randomintrange( 0, var_0.size )];
self.goalradius = 16;
if ( !isnodeoccupied( var_1 ) )
{
common_scripts\utility::flag_set( "enc_movement_token_taken" );
self setgoalnode( var_1 );
self waittill( "goal" );
common_scripts\utility::flag_clear( "enc_movement_token_taken" );
wait 2.0;
}
}
common_scripts\utility::flag_clear( "enc_movement_token_taken" );
}
escape_enemy_00_think()
{
self endon( "death" );
maps\_utility::gun_remove();
maps\_utility::forceuseweapon( level.player.weapon_interior, "primary" );
self.fixednode = 1;
maps\_utility::set_goal_radius( 2 );
thread maps\odin_util::npc_physics_pulse();
escape_enemy_setup();
common_scripts\utility::flag_wait_or_timeout( "escape_enc_activated", 6 );
common_scripts\utility::flag_set( "escape_enc_activated" );
wait( randomfloatrange( 0.3, 1.0 ) );
self.ignoreall = 0;
self.favoriteenemy = level.player;
var_0 = getnode( "node_cq_enc_forward_left", "targetname" );
self setgoalnode( var_0 );
self waittill( "goal" );
}
escape_enemy_01_think()
{
maps\_utility::gun_remove();
maps\_utility::forceuseweapon( level.player.weapon_interior, "primary" );
self.fixednode = 1;
maps\_utility::set_goal_radius( 2 );
thread maps\odin_util::npc_physics_pulse();
escape_enemy_setup();
common_scripts\utility::flag_wait_or_timeout( "escape_enc_activated", 6 );
common_scripts\utility::flag_set( "escape_enc_activated" );
wait( randomfloatrange( 0.3, 1.0 ) );
self.ignoreall = 0;
self.favoriteenemy = level.player;
var_0 = getnode( "node_cq_enc_middle_right", "targetname" );
self setgoalnode( var_0 );
self waittill( "goal" );
thread cq_combat_movement();
self waittill( "death" );
common_scripts\utility::flag_clear( "enc_movement_token_taken" );
self notify( "stop_combat" );
}
escape_enemy_02_think()
{
maps\_utility::gun_remove();
maps\_utility::forceuseweapon( level.player.weapon_interior, "primary" );
thread maps\odin_util::npc_physics_pulse();
var_0 = getent( "cq_killed_crew2", "targetname" );
var_1 = var_0 maps\odin_util::spawn_odin_actor_internal( 1 );
var_1.team = "neutral";
self.ignoreall = 1;
self.animname = "odin_opfor";
self.allowdeath = 1;
var_1.ignoreall = 1;
var_1.nodeathimpulse = 1;
var_1.animname = "odin_redshirt";
var_1 maps\_utility::gun_remove();
var_2 = common_scripts\utility::getstruct( "kyra_move_node01", "targetname" );
var_2 thread maps\_anim::anim_single_solo( self, "odin_escape_first_encounter_opfor02" );
thread redshirt_cq_enc_handles2( var_1, var_2 );
var_2 = getnode( "node_cq_enc_middle_right", "targetname" );
if ( isalive( self ) )
{
self.fixednode = 1;
self.ignoreall = 0;
self setgoalnode( var_2 );
thread cq_combat_movement();
self.favoriteenemy = level.player;
}
self.fixednode = 1;
maps\_utility::set_goal_radius( 2 );
escape_enemy_setup();
thread firing_into_bunks();
common_scripts\utility::flag_wait_or_timeout( "escape_enc_activated", 6 );
common_scripts\utility::flag_set( "escape_enc_activated" );
wait( randomfloatrange( 0.3, 1.0 ) );
self.ignoreall = 0;
self.favoriteenemy = level.player;
var_3 = getnode( "node_cq_enc_middle_right", "targetname" );
self setgoalnode( var_3 );
self waittill( "death" );
thread escape_destruct_boxes( "esc_fuse_boxes_01_exploder" );
common_scripts\utility::flag_set( "trigger_third_guy" );
common_scripts\utility::flag_clear( "enc_movement_token_taken" );
self notify( "stop_combat" );
}
redshirt_cq_enc_handles2( var_0, var_1 )
{
var_1 maps\_anim::anim_single_solo( var_0, "odin_escape_first_encounter_redshirt02" );
var_0.forceragdollimmediate = 1;
wait 0.1;
if ( isalive( var_0 ) )
var_0 kill();
}
escape_enemy_03_think()
{
self endon( "death" );
maps\_utility::gun_remove();
maps\_utility::forceuseweapon( level.player.weapon_interior, "primary" );
var_0 = level.player.threatbias;
var_1 = level.ally.threatbias;
var_2 = getent( "thirdGuyTarget", "targetname" );
maps\_utility::set_goal_radius( 2 );
self setgoalpos( var_2.origin );
self.fixednode = 1;
maps\_utility::magic_bullet_shield();
maps\_utility::disable_arrivals();
thread maps\odin_util::odin_drop_weapon();
thread maps\odin_util::npc_physics_pulse();
common_scripts\utility::flag_wait_or_timeout( "trigger_third_guy", 8 );
thread maps\odin_audio::sfx_phantom_door_close();
maps\_utility::stop_magic_bullet_shield();
level.ally.ignoreme = 1;
var_2 = getnode( "third_guy_destination", "targetname" );
self setgoalpos( var_2.origin );
self.ignoreall = 0;
self.favoriteenemy = level.ally;
level.ally.threatbias = 10000;
self waittill( "goal" );
level.player.threatbias = var_0;
level.ally.threatbias = var_1;
level.player.ignoreme = 0;
level.ally.ignoreme = 1;
self waittill( "death" );
thread escape_destruct_boxes( "esc_fuse_boxes_02_exploder" );
common_scripts\utility::flag_clear( "enc_movement_token_taken" );
self notify( "stop_combat" );
}
third_enemy_shooting()
{
self endon( "death" );
var_0 = gettime();
var_1 = gettime() - 3000;
var_2 = getnode( "cq_ally_position", "targetname" );
while ( var_1 < var_0 )
{
var_1 = gettime() - 3000;
var_3 = randomfloatrange( 0.1, 0.5 );
for ( var_4 = 0; var_4 < 3; var_4++ )
{
if ( isalive( self ) )
self shoot( 1, var_2.origin, 1 );
else
break;
wait 0.05;
}
wait( var_3 );
}
}
firing_into_bunks()
{
self endon( "death" );
level endon( "escape_enc_activated" );
self.goalradius = 16;
self waittill( "goal" );
maps\_utility::disable_pain();
var_0 = getent( self.script_noteworthy + "_aim", "targetname" );
for ( var_1 = 0; var_1 < 5; var_1++ )
{
magicbullet( self.weapon, self gettagorigin( "tag_flash" ), var_0.origin );
wait( randomfloatrange( 0.1, 0.5 ) );
}
self setgoalpos( self.origin );
}
set_flag_on_player_action( var_0 )
{
level endon( var_0 );
if ( common_scripts\utility::flag( var_0 ) )
return;
for (;;)
{
level.player waittill( "weapon_fired" );
break;
}
common_scripts\utility::flag_set( var_0 );
}
crew_quarters_aftermath()
{
level.ally thread escape_ally_movement_start();
thread escape_dialogue();
common_scripts\utility::flag_wait( "start_odin_firing_scene" );
}
escape_dialogue()
{
maps\_utility::smart_radio_dialogue( "odin_shq_odinpayload1uploading" );
if ( !common_scripts\utility::flag( "start_odin_firing_scene" ) )
maps\_utility::smart_radio_dialogue( "odin_atl_targetinglosangeles" );
wait 0.9;
if ( !common_scripts\utility::flag( "start_odin_firing_scene" ) )
maps\_utility::smart_radio_dialogue( "odin_atl_sandiegolocked" );
wait 1.2;
if ( !common_scripts\utility::flag( "start_odin_firing_scene" ) )
maps\_utility::smart_radio_dialogue( "odin_atl_phoenixlocked" );
wait 0.4;
if ( !common_scripts\utility::flag( "start_odin_firing_scene" ) )
maps\_utility::smart_radio_dialogue( "odin_atl_targetinghouston" );
if ( !common_scripts\utility::flag( "start_odin_firing_scene" ) )
maps\_utility::smart_radio_dialogue( "odin_atl_targetingmiami" );
if ( !common_scripts\utility::flag( "start_odin_firing_scene" ) )
maps\_utility::smart_radio_dialogue( "odin_shq_odintargetingsolutionsare" );
if ( !common_scripts\utility::flag( "start_odin_firing_scene" ) )
maps\_utility::smart_radio_dialogue( "odin_shq_rodfeedengaging" );
if ( !common_scripts\utility::flag( "start_odin_firing_scene" ) )
maps\_utility::smart_radio_dialogue( "odin_kyr_budfollowmewe" );
}
check_for_escape_dialogue_overlap( var_0 )
{
common_scripts\utility::flag_set( "escape_overlap_dialogue" );
maps\_utility::smart_radio_dialogue( var_0 );
common_scripts\utility::flag_clear( "escape_overlap_dialogue" );
}
ally_console_scene()
{
level endon( "early_decomp" );
common_scripts\utility::flag_wait( "start_odin_firing_scene" );
thread lock_auto_door();
thread console_scene_player_blocker();
level.ally play_console_scene();
}
lock_auto_door()
{
level endon( "early_decomp" );
common_scripts\utility::flag_wait( "escape_blocker_door_trig" );
common_scripts\utility::flag_set( "lock_escape_window_auto_door" );
}
play_console_scene()
{
level endon( "early_decomp" );
thread odin_firing_sequence();
console_scene_dialogue();
}
ally_dialogue_overlap_check( var_0 )
{
if ( common_scripts\utility::flag( "escape_overlap_dialogue" ) )
maps\_utility::smart_radio_dialogue_overlap( var_0 );
else
maps\_utility::smart_radio_dialogue( var_0 );
}
window_vo_01( var_0 )
{
ally_dialogue_overlap_check( "odin_ast1_ohnoodinis" );
}
window_vo_02( var_0 )
{
common_scripts\utility::flag_set( "open_second_pod" );
ally_dialogue_overlap_check( "odin_kyr_theyreuploadingmore" );
common_scripts\utility::flag_set( "fire_rog" );
}
window_vo_03( var_0 )
{
maps\_utility::radio_dialogue_stop();
maps\_utility::smart_radio_dialogue( "odin_ast1_houstonwhatdowe" );
}
window_vo_04( var_0 )
{
maps\_utility::radio_dialogue_stop();
maps\_utility::smart_radio_dialogue( "odin_ho2_odincontrolwehave" );
}
window_vo_05( var_0 )
{
maps\_utility::radio_dialogue_stop();
maps\_utility::smart_radio_dialogue( "odin_ho2_imsorrymosley" );
}
window_vo_06( var_0 )
{
maps\_utility::radio_dialogue_stop();
maps\_utility::smart_radio_dialogue( "odin_ast1_copyhouston" );
common_scripts\utility::flag_set( "remove_window_blocker" );
}
window_vo_07( var_0 )
{
maps\_utility::radio_dialogue_stop();
thread maps\_utility::smart_radio_dialogue( "odin_ho2_initiatingin10seconds_2" );
maps\_utility::smart_radio_dialogue_overlap( "odin_kyr_budweneedto_2" );
common_scripts\utility::flag_set( "window_VO_Done" );
}
console_scene_dialogue()
{
level endon( "early_decomp" );
common_scripts\utility::flag_set( "fire_rog" );
level notify( "player_has_shroud_now" );
check_for_escape_dialogue_overlap( "odin_shq_estimatedcasualties112" );
common_scripts\utility::flag_wait( "window_VO_Done" );
common_scripts\utility::flag_clear( "clear_to_tweak_player" );
common_scripts\utility::flag_set( "objective_escape_sat" );
common_scripts\utility::flag_set( "ally_console_scene_done" );
thread maps\_utility::smart_radio_dialogue( "odin_kyr_comeonbudif" );
common_scripts\utility::flag_set( "fire_rog" );
thread maps\odin_audio::sfx_scuttle_pre_decomp();
wait 2.0;
maps\_utility::smart_radio_dialogue_overlap( "odin_shq_stationdetonationin3" );
common_scripts\utility::flag_set( "destruction_sequence_started" );
thread post_window_nag();
}
post_window_nag()
{
level endon( "early_decomp" );
level endon( "player_exited_escape_hallway" );
var_0 = 4;
for (;;)
{
wait( var_0 );
maps\_utility::smart_radio_dialogue( "odin_kyr_budweneedto_2" );
var_0 = var_0 + 2;
if ( var_0 > 20 )
var_0 = 20;
}
}
odin_firing_sequence()
{
level endon( "player_exited_escape_hallway" );
thread prepare_odin_to_fire();
thread maps\odin_fx::fx_escape_fire_rods();
common_scripts\utility::flag_wait( "ally_at_console" );
wait 3.0;
}
prepare_odin_to_fire()
{
level endon( "player_exited_escape_hallway" );
common_scripts\utility::flag_wait( "ready_to_fire_next_salvo" );
for ( var_0 = 1; var_0 <= 4; var_0++ )
{
common_scripts\utility::exploder( "fx_odin_pods_opening_0" + var_0 );
var_1 = getentarray( "odin_pod_panels_0" + var_0, "targetname" );
foreach ( var_3 in var_1 )
{
var_4 = getent( var_3.target, "targetname" );
var_3 moveto( var_4.origin, randomfloatrange( 10, 14 ), 0.5, 5 );
var_3 rotateto( ( var_3.angles[0] + randomint( 4 ), var_3.angles[1] + randomint( 4 ), var_3.angles[2] + randomint( 4 ) ), 12, 0.5, 10 );
}
common_scripts\utility::flag_clear( "ready_to_fire_next_salvo" );
common_scripts\utility::flag_wait( "ready_to_fire_next_salvo" );
wait 0.1;
}
}
add_dialogue_line_timed( var_0, var_1, var_2, var_3 )
{
thread maps\_utility::add_dialogue_line( var_0, var_1, var_2 );
wait( var_3 );
}
console_scene_player_blocker()
{
var_0 = getent( "console_player_blocker", "targetname" );
common_scripts\utility::flag_wait( "remove_window_blocker" );
var_0 delete();
}
destruction_sequence()
{
common_scripts\utility::flag_wait( "destruction_sequence_started" );
thread ramping_explosions();
thread random_ambient_escape_fx();
thread escape_explosion_player_timeout();
common_scripts\utility::flag_wait( "player_exited_escape_hallway" );
}
ramping_explosions()
{
level endon( "start_near_explosion_sequence" );
level.play_shake_sound = 1;
var_0 = 0.02;
var_1 = 0.1;
thread maps\odin_audio::sfx_escape_destruction_fire_puffs();
common_scripts\utility::exploder( "escape_destruction" );
if ( maps\_utility::is_gen4() )
common_scripts\utility::exploder( "escape_destruction_ng" );
thread maps\odin_audio::sfx_scuttle_alarm();
for (;;)
{
thread maps\odin_audio::sfx_shaking_logic();
earthquake( randomfloatrange( var_0, var_1 ), 1.0, level.player.origin, 500 );
if ( common_scripts\utility::cointoss() )
level.player playrumbleonentity( "light_3s" );
else
level.player playrumbleonentity( "heavy_1s" );
common_scripts\utility::exploder( "escape_destruction_random" );
wait( randomfloatrange( 0.8, 2.4 ) );
var_0 = var_0 + 0.05;
var_1 = var_1 + 0.08;
if ( var_0 > 0.15 )
var_0 = 0.15;
if ( var_1 > 0.35 )
var_1 = 0.35;
}
}
random_ambient_escape_fx()
{
level endon( "player_exited_escape_hallway" );
wait( randomfloatrange( 1.2, 2.2 ) );
common_scripts\utility::exploder( "escape_destruction_random" );
}
escape_explosion_player_timeout()
{
level endon( "odin_start_spin_decomp" );
wait 20;
var_0 = getentarray( "escape_fail_explosion_FX_Origin", "script_noteworthy" );
var_1 = 0;
var_2 = 0;
var_3 = 0;
foreach ( var_5 in var_0 )
{
var_1 = randomintrange( -40, 40 );
var_2 = randomintrange( -40, 40 );
var_3 = randomintrange( 0, 40 );
var_5.origin = level.player.origin + ( var_1, var_2, var_3 );
playfx( common_scripts\utility::getfx( "spc_explosion_1200" ), var_5.origin );
}
level.player playsound( "scn_odin_decompression_explode2_ss" );
wait 0.5;
foreach ( var_5 in var_0 )
playfx( common_scripts\utility::getfx( "spc_explosion_1200" ), var_5.origin );
wait 0.5;
level.player kill();
level notify( "new_quote_string" );
setdvar( "ui_deadquote", &"ODIN_WINDOW_TIMEOUT" );
maps\_utility::missionfailedwrapper();
}
early_decomp_checker()
{
common_scripts\utility::flag_wait( "absolute_fire_decompression" );
level notify( "early_decomp" );
level notify( "player_exited_escape_hallway" );
level notify( "odin_start_spin_decomp" );
level notify( "start_near_explosion_sequence" );
common_scripts\utility::flag_set( "start_near_explosion_sequence" );
common_scripts\utility::flag_set( "player_exited_escape_hallway" );
common_scripts\utility::flag_set( "escape_clear" );
}
escape_cleanup( var_0 )
{
var_1 = getentarray( "space_cover_test", "targetname" );
foreach ( var_3 in var_1 )
var_3 delete();
var_5 = getentarray( "cq_dynamic_objects", "script_noteworthy" );
foreach ( var_7 in var_5 )
var_7 delete();
}
manage_earth( var_0 )
{
var_1 = getent( "fake_earth", "targetname" );
if ( !isdefined( var_1 ) )
return;
switch ( var_0 )
{
case "hide":
var_1 hide();
break;
case "show":
var_1 show();
break;
case "delete":
var_1 delete();
break;
}
}