nx1-gsc-dump/maps/nx_skyscraper_elevator.gsc

856 lines
25 KiB
Plaintext

//****************************************************************************
// **
// Confidential - (C) Activision Publishing, Inc. 2010 **
// **
//****************************************************************************
// **
// Module: MISSION DESCRIPTION **
// **
// Created: 7/15/2011 - Ken Moodie **
// **
//****************************************************************************
#include maps\_utility;
#include maps\_utility_code;
#include maps\_nx_objective_util;
#include common_scripts\utility;
#include maps\_anim;
#include maps\_vehicle;
#include maps\_nx_utility;
#include maps\nx_skyscraper_util;
//*******************************************************************
// ELEVATOR *
// *
//*******************************************************************
elevator_start()
{
level._player maps\_nx_utility::move_player_to_start_point( "playerstart_elevator" );
thread maps\nx_skyscraper_fx::set_vision_and_fog("interior_elevator_shaft", 0); // set appropriate vision and fog
thread maps\_utility::set_ambient( "amb_skyscraper_lobby_int" );
maps\nx_skyscraper_util::spawn_business_baker();
level.baker maps\nx_skyscraper_anim::enable_casual_lobby_anims();
level.baker gun_remove();
baker_teleport = GetEnt ("baker_elevator_teleport", "targetname");
level.baker ForceTeleport( baker_teleport.origin, baker_teleport.angles);
maps\nx_skyscraper_util::player_remove_abilities();
// Make elevator transparent at start.
thread fx_elevator_glass_cycle( 0, 999, "player_elevator" );
// Hide cloud ring.
thread fx_hide_cloud_ring();
thread maps\nx_skyscraper_drive_up::lobby_elevator_behavior();
maps\nx_skyscraper_drive_up::player_elevator_setup();
maps\nx_skyscraper_elevator::elevator_vertical_teleport( "player_elevator", 15 );
wait 1;
thread maps\nx_skyscraper_drive_up::lobby_player_elevator_descent( );
trigger = GetEnt ("obj_enter_elevator", "targetname");
trigger notify ( "trigger" );
}
elevator_sequence()
{
issue_color_orders( "r5", "allies" );
// Make elevator transparent at start.
thread fx_elevator_glass_cycle( 0, 999, "player_elevator" );
// elevator_door_move ( "player_elevator", "open");
flag_wait ("player_elevator_ready");
// Baker moves into elevator
issue_color_orders( "r6", "allies" );
path_mesh_helper_delete();
trigger = GetEnt ("obj_reach_freight_shaft", "targetname");
thread baker_enters_elevator();
// Wait until the player is in the elevator
trigger waittill ("trigger");
thread maps\nx_skyscraper_fx::set_vision_and_fog("interior_elevator_shaft", 1); // set appropriate vision and fog
// Wait for Baker to enter the elevator
while ( !level.baker isTouching ( trigger ))
{
wait .5;
}
//play the vignette of baker kicking out the civ
maps\nx_skyscraper_anim::elevator_push_spawn();
while ( 1 )
{
trigger waittill ("trigger");
thread elevator_door_move ( "player_elevator", "close");
elevator_door_move ( "player_elevator_facade", "close");
// Ensure the player is still in the elevator
if ( level._player isTouching ( trigger ))
break;
//thread add_dialogue_line( "Baker", "Get in here, Spectre.", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_getinhere" );
thread elevator_door_move ( "player_elevator", "open");
elevator_door_move ( "player_elevator_facade", "open");
}
thread elevator_ceiling_light();
thread maps\_utility::set_ambient( "amb_skyscraper_elevator_int" );
thread shaft_fall_watcher_1();
// Checkpoint!
thread autosave_now();
wait .1;
// Elevator ascends
thread elevator_vertical_move( "player_elevator", 161, 40 );
flag_set ("elevator_in_motion");
wait 2;
// Make elevator opaque.
thread fx_elevator_glass_cycle( 1, -0.25, "player_elevator" );
// thread elevator_mascot_monolog();
thread elevator_dialog();
// thread elevator_security_feed(); // Re-enable this line to see the security feed PIP sequence
wait 7;
level notify ("clean_up_lobby");
flag_set ("outelevator_fg");
level.baker maps\nx_skyscraper_anim::disable_casual_lobby_anims();
level waittill ("floor_reached");
flag_wait ("player_in_shaft");
// thread elevator_other_movement();
// shaft_sequence();
}
baker_enters_elevator()
{
flag_wait ("player_elevator_ready");
level.baker waittill ("goal");
node = GetEnt ("player_elevator_anim_node", "targetname");
node anim_reach_solo (level.baker, "elevator_idle_loop");
level.baker linkto (node);
node thread anim_loop_solo (level.baker, "elevator_idle_loop", "stop_idle");
flag_set ("baker_in_elevator");
flag_wait ("outelevator_fg");
node notify ("stop_idle");
level waittill ("floor_reached");
//level.baker unlink();
}
elevator_vertical_move( elevator, floors, time )
{
// convert number of floors into height in units
height = (128 * floors);
elevator_sfx = level._player;
// Get all the entities in the elevator
elevator_parts = GetEntArray( elevator , "script_noteworthy" );
// Move the elevator upwards
foreach( part in elevator_parts )
{
if( part.classname == "script_brushmodel" || part.classname == "script_origin" || part.classname == "script_model" || part.classname == "light_spot" )
{
if ( isdefined ( part.targetname) && ( part.targetname == "exterior_door_left" || part.targetname == "exterior_door_right") )
{
}
else
{
part MoveTo( part.origin + (0, 0, height), time, 2, 2 );
if( elevator == "elevator_1" )
{
elevator_sfx = part;
}
}
}
}
if( elevator == "player_elevator" && floors != -15 )
{
//elevator_sfx playsound("skyscraper_elevator_startup");
//Commenting out for Tom to test
//elevator_sfx thread maps\nx_skyscraper_audio::player_elevator_ride_up_sfx();
}
wait time;
if( elevator == "player_elevator" )
{
level notify ("floor_reached");
}
}
elevator_ceiling_light()
{
light_location = GetEnt ("light_location", "targetname");
PlayFXOnTag( level._effect[ "elevator_ceiling_light" ], light_location, "tag_origin" );
flag_wait ("elevator_out_lift_done");
StopFXOnTag ( level._effect[ "elevator_ceiling_light" ], light_location, "tag_origin", true );
}
elevator_vertical_teleport( elevator, floors )
{
// convert number of floors into height in units
height = (128 * floors);
// Get all the entities in the elevator
elevator_parts = GetEntArray( elevator , "script_noteworthy" );
// Teleport them up/down the number of floors
foreach( part in elevator_parts )
{
if( part.classname == "script_brushmodel" || part.classname == "script_origin" || part.classname == "script_model" || part.classname == "light_spot")
{
if ( isdefined ( part.targetname) && (part.targetname == "exterior_door_left" || part.targetname == "exterior_door_right") )
{
}
else
{
// part.origin = (part.origin + (0,0,height));
part MoveTo( part.origin + (0, 0, height), 0.1, 0, 0 );
}
}
}
}
/*
elevator_horizontal_move( elevator, direction )
{
normal = undefined;
distance = undefined;
time = 4;
// "out" means towards the outside of the curve, "in" means towards the inside of the curve.
if ( direction == "out" )
{
distance = 180;
}
if ( direction == "in" )
{
distance = -180;
}
if ( direction == "freight" )
{
distance = 360;
}
elevator_parts = GetEntArray( elevator , "script_noteworthy" );
foreach( part in elevator_parts )
{
if ( IsDefined ( part.targetname) && part.targetname == "elevator_bottom")
{
forward = AnglesToForward( part.angles );
normal = VectorNormalize( forward );
}
}
foreach( part in elevator_parts )
{
if( part.classname == "script_brushmodel" || part.classname == "script_origin" || part.classname == "script_model" || part.classname == "light_spot" )
{
part MoveTo( part.origin + (distance * normal), time, 1, 1 );
}
}
wait time;
}
elevator_security_feed()
{
level waittill ("show_security_feed");
thread maps\nx_skyscraper_util::pip_setup();
player_proxy = spawn ("script_model", level._player.origin + (0,0,32));
player_proxy SetModel ("toy_alien");
player_proxy linkto ( level._player);
show_elevator_camera( "player_elevator" );
level waittill ("show_masked_security_feed");
show_elevator_camera( "fake_elevator" );
player_proxy delete();
wait 5;
level notify ("remove_pip");
}
*/
elevator_dialog( )
{
wait 1;
// add_dialogue_line( "Baker", "(Sigh) Team A, please tell me you've taken care of the security cameras.", "green", 3 );
level.baker dialogue_queue( "sky_bak_elevator_securitycameras" );
// add_dialogue_line( "Team A", "Just a minute. We're still decrypting the feed.", "purple", 2 );
radio_dialogue ("sky_teama_elevator_decrypting");
// level notify ("show_security_feed");
// add_dialogue_line( "Baker", "I see it. Spectre's masked but I'm still here.", "green", 2 );
level.baker dialogue_queue( "sky_bak_elevator_iseeit" );
// add_dialogue_line( "Team A", "Be patient.", "purple", 2 );
radio_dialogue ("sky_teama_elevator_bepatient");
wait 2;
// level notify ("show_masked_security_feed");
// add_dialogue_line( "Team A", "There it is. You are clear to continue.", "purple", 2 );
radio_dialogue ("sky_teama_elevator_thereitis");
// add_dialogue_line( "Baker", "Roger that. Time to suit up, Spectre.", "green", 2 );
level.baker dialogue_queue( "sky_bak_elevator_suitup" );
}
elevator_pattern_1( elevator, passenger1, passenger2, node )
{
level endon ("freight_elevator_stop");
thread elevator_vertical_move( elevator, 15, 8 );
wait 2;
thread fx_elevator_glass_cycle( 1, -0.25, elevator );
wait 9;
thread elevator_vertical_move( elevator, -15, 8 );
wait 6;
thread fx_elevator_glass_cycle( 0, 1, elevator );
wait 2;
elevator_door_move ( elevator, "open");
level.passengers[ passenger1 ] thread maps\nx_skyscraper_drive_up::goal_node_target_pathing( node );
wait .5;
level.passengers[ passenger2 ] thread maps\nx_skyscraper_drive_up::goal_node_target_pathing( node );
wait 3;
elevator_door_move ( elevator, "close");
wait 2;
thread elevator_vertical_move( elevator, 15, 8 );
wait 2;
thread fx_elevator_glass_cycle( 1, -0.25, elevator );
// elevator notify ("at_ground_floor");
}
/*
elevator_pattern_2( elevator )
{
level endon ("freight_elevator_stop");
while ( 1)
{
elevator_horizontal_move( elevator, "out" );
elevator_vertical_move( elevator, 18, 13 );
elevator_horizontal_move( elevator, "in" );
elevator_vertical_move( elevator, -18, 13 );
}
}
elevator_pattern_3( elevator )
{
level endon ("freight_elevator_stop");
while ( 1)
{
// wait 1;
elevator_vertical_move( elevator, -4, 6 );
wait 22;
elevator_vertical_move( elevator, -14, 16 );
}
}
elevator_pattern_4( elevator )
{
level endon ("freight_elevator_stop");
while ( 1)
{
elevator_horizontal_move( elevator, "in" );
elevator_vertical_move( elevator, 6, 6 );
elevator_horizontal_move( elevator, "out" );
level notify ("hazard_elevator_clear");
elevator_vertical_move( elevator, 16, 14 );
}
}
elevator_pattern_5( elevator )
{
level endon ("freight_elevator_stop");
while ( 1)
{
elevator_vertical_move( elevator, -26, 12 );
elevator_vertical_move( elevator, 26, 12 );
}
}
elevator_pattern_6( elevator )
{
level endon ("freight_elevator_stop");
while ( 1)
{
elevator_vertical_move( elevator, 26, 12 );
elevator_vertical_move( elevator, -26, 12 );
}
}
elevator_pattern_7( elevator )
{
level endon ("freight_elevator_stop");
while ( 1)
{
elevator_vertical_move( elevator, 52, 24 );
elevator_vertical_move( elevator, -52, 24 );
}
}
elevator_pattern_8( elevator )
{
elevator_vertical_move( elevator, 12, 20 );
flag_set ("ally_elevator_in_position");
}
show_elevator_camera( elevator )
{
elevator_parts = GetEntArray( elevator , "script_noteworthy" );
foreach( part in elevator_parts )
{
if ( IsDefined ( part.targetname) && part.targetname == "elevator_camera")
{
level._player AlternateSceneCameraLinkTo( part , "tag_origin", 90 );
}
}
}
*/
elevator_door_move ( elevator, direction )
{
normal = undefined;
distance = undefined;
time = 2.5;
if ( direction == "open" )
{
distance = 40;
}
if ( direction == "close" )
{
distance = -40;
}
if ( direction == "freight_open" )
{
distance = 64;
}
elevator_parts = GetEntArray( elevator , "script_noteworthy" );
foreach( part in elevator_parts )
{
if ( IsDefined ( part.targetname) && part.targetname == "elevator_bottom")
{
right_angle = (part.angles + (0,90,0));
right = AnglesToRight( right_angle );
normal = VectorNormalize( right );
// iprintln ("normal: " + normal);
}
}
foreach( part in elevator_parts )
{
if( IsDefined ( part.targetname) && ( part.targetname == "door_right" || part.targetname == "exterior_door_right"))
{
if ( direction == "open" )
{
part ConnectPaths();
if ( elevator == "player_elevator" )
{
part playsound("skyscraper_elevator_door_open_r");
}
}
if ( direction == "close" )
{
part DisconnectPaths();
if ( elevator == "player_elevator" )
{
part playsound("skyscraper_elevator_door_close_r");
}
}
part MoveTo( part.origin + (distance * normal), time, .5, .5 );
}
if( IsDefined ( part.targetname) && ( part.targetname == "door_left" || part.targetname == "exterior_door_left"))
{
if ( direction == "open" )
{
part ConnectPaths();
if ( elevator == "player_elevator" )
{
part playsound("skyscraper_elevator_door_open_l");
}
}
if ( direction == "close" )
{
part DisconnectPaths();
if ( elevator == "player_elevator" )
{
part playsound("skyscraper_elevator_door_close_l");
}
}
part MoveTo( part.origin + (distance * normal * -1), time, .5, .5 );
}
}
wait time;
}
//*******************************************************************
// SHAFT *
// *
//*******************************************************************
shaft_start()
{
level._player maps\_nx_utility::move_player_to_start_point( "playerstart_shaft" );
thread maps\nx_skyscraper_fx::set_vision_and_fog("interior_elevator_shaft", 0); // set appropriate vision and fog
flag_set ("elevator_out_lift_done");
path_mesh_helper_delete();
thread maps\_utility::set_ambient( "amb_skyscraper_elevator_shaft" );
maps\nx_skyscraper_util::spawn_baker();
baker_teleport = GetEnt ("baker_shaft_teleport", "targetname");
level.baker ForceTeleport( baker_teleport.origin, baker_teleport.angles);
thread elevator_vertical_teleport( "player_elevator", 161);
maps\nx_skyscraper_util::player_remove_abilities();
}
shaft_sequence()
{
thread maps\_utility::set_ambient( "amb_skyscraper_elevator_shaft" );
thread shaft_fall_watcher_2();
thread autosave_now();
flag_wait ("elevator_out_lift_done");
// make second jump blocker not solid
blocker = GetEnt ("player_second_jump_blocker", "targetname");
blocker NotSolid();
level._player AllowJump(true);
setsaveddvar( "r_spotlightbrightness", "2" );
PlayFXOnTag( level._effect[ "flashlight_spotlight" ], level.baker, "tag_flash" );
PlayFXOnTag( level._effect[ "flashlight" ], level.baker, "tag_flash" );
thread shaft_dialog();
//Play Baker Vignette Walking accross the shaft - Baker shoudl end in idle
thread maps\nx_skyscraper_anim::elevator_shaft1_baker();
//Play a close encounter with an elevator
//trigger = GetEnt ("player_enter_elevator_shaft_e2", "targetname");
//trigger waittill ("trigger");
//thread maps\nx_skyscraper_anim::elevator_shaft1_e2();
//Play Player Vignette Going Around obstacle
trigger = GetEnt ("player_enter_elevator_shaft_pole", "targetname");
//trigger SetHintString( &"NX_SKYSCRAPER_HINT_POLE" );
trigger waittill ("trigger");
trigger trigger_off();
maps\nx_skyscraper_anim::elevator_shaft1_player();
//Play Player and Baker Vignette jumping onto the elevator - Baker should end in an idle
// Playing this early to spawn the elevators. The anim wont' happen until the trigger is tripped.
maps\nx_skyscraper_anim::elevator_shaftjump();
//Play Player and Baker Vignette climbing off the elevator - Baker should end in an idle
trigger3 = GetEnt ("player_ready_elevator_climb", "targetname");
trigger3 SetHintString( &"NX_SKYSCRAPER_HINT_SHAFT_JUMP" );
// thread maps\nx_skyscraper_anim::elevator_shaftclimb_ally();
// trigger3 waittill ("trigger");
// thread maps\nx_skyscraper_anim::elevator_shaftclimb();
flag_wait ("shaftclimb_player_done");
flag_wait ("elevator_b_in_position");
//Play Player and Baker Vignette hooking up
display_hint ("NX_SKYSCRAPER_HINT_HOOK_UP");
thread maps\nx_skyscraper_anim::elevator_shafthookup();
shaft_freight_hookup();
// level waittill ("shaft_vignette_done");
level._player maps\_nx_utility::move_player_to_start_point( "playerstart_window" );
player_restore_abilities();
}
shaft_fall_watcher_1()
{
// Checks to see if the player is not in the trigger (standing atop the elevator)
level endon ("floor_reached");
level waittill ("elevator_out_lift_done");
while ( flag ("elevator_safe_zone"))
{
wait .1;
}
wait 0.5;
SetSlowMotion( 1.0, 0.5, 0.25 );
SetDvar( "ui_deadquote", &"NX_SKYSCRAPER_FAIL_FALL" );
missionFailedWrapper();
}
shaft_fall_watcher_2()
{
// Stop checking once the jump to second elevator vignette plays
//trigger = GetEnt ("player_ready_elevator_jump_blend", "targetname");
//trigger endon ("trigger");
level endon ("freight_elevator_stop");
// If the player falls into the trigger
fall_trigger = GetEnt ("shaft_fall", "targetname");
fall_trigger waittill ("trigger");
// Mission Fail
SetSlowMotion( 1.0, 0.5, 0.25 );
SetDvar( "ui_deadquote", &"NX_SKYSCRAPER_FAIL_FALL" );
missionFailedWrapper();
}
/*
shaft_freight_movement()
{
trigger = GetEnt ("player_atop_shaft", "targetname");
trigger waittill ("trigger");
iprintlnbold ("Go prone to avoid being squashed");
iprintlnbold ("and wait a few seconds.");
thread maps\_utility::set_ambient( "amb_skyscraper_elevator_freight_shaft" );
elevator_vertical_move ( "freight_elevator", 13, 10);
elevator_horizontal_move ( "freight_elevator", "freight" );
flag_wait ("hooked_up");
elevator_vertical_move ( "freight_elevator", 71.5 , 25);
level notify ("freight_elevator_stop");
level._player SwitchToWeapon ("lancer_silencer_xray");
}
*/
shaft_freight_hookup()
{
/*
use_trigger = GetEnt("use_freight_hook_up", "targetname");
use_trigger trigger_off();
detect_trigger = GetEnt("elevator_detector", "targetname");
trigger = GetEnt ("player_atop_shaft", "targetname");
elevator_parts = GetEntArray( "freight_elevator", "script_noteworthy" );
foreach( part in elevator_parts )
{
if ( IsDefined ( part.targetname) && part.targetname == "elevator_bottom")
{
while ( !part IsTouching ( detect_trigger ))
{
wait .1;
}
wait 2;
use_trigger trigger_on();
use_trigger sethintstring( "[ PRESS (X) TO HOOK UP ]" );
// Temp hack until I can figure out why the use trigger is not working.
level notify ("freight_elevator_in_position");
flag_set ("hooked_up");
// use_trigger waittill ("trigger");
wait 1;
link = spawn ("script_model", level._player.origin );
link linkto ( part );
// Temp Baker script
level._player PlayerLinkToDelta ( link );
level.baker Linkto ( link );
level.baker AllowedStances( "crouch" );
}
}
*/
elevator_guard = spawn_targetname ("elevator_guard_spawner");
elevator_guard SetIsVisibleInXray();
elevator_guard.animname = "elevator_guard";
elevator_guard thread anim_loop_solo ( elevator_guard, "elevator_guard_sleep", "stop_idle");
// elevator_guard.health = 1;
level waittill ("freight_elevator_stop");
maps\nx_skyscraper_util::player_weapon_init( false );
// Security cam pip cannot see the guard in his new position, so it's been disabled
//thread maps\nx_skyscraper_util::pip_setup();
//cam = GetEnt ("office_hall_camera", "targetname");
//level._player AlternateSceneCameraLinkTo( cam , "tag_origin", 60 );
thread freight_shaft_kill_timeout( elevator_guard );
elevator_guard.allowdeath = true;
elevator_guard waittill ("damage");
elevator_guard notify ("stop_idle");
elevator_guard kill();
// Wait until the guard has finished playing the death animation
while ( isdefined ( elevator_guard))
{
wait .1;
}
// then delete his corpses, to be replaced with the vignette corpse
ClearAllCorpses();
StopFXOnTag( level._effect[ "flashlight_spotlight" ], level.baker, "tag_flash", true );
StopFXOnTag( level._effect[ "flashlight" ], level.baker, "tag_flash", true );
//level notify ("remove_pip");
level._player unlink();
level.baker AllowedStances( "crouch", "stand", "prone" );
level.baker unlink();
flag_set ("flag_elevator_red_disembark");
shaft_open_freight_door();
// Temporary Teleport
level._player maps\_nx_utility::move_player_to_start_point( "playerstart_window" );
player_restore_abilities();
thread maps\_utility::set_ambient( "amb_skyscraper_office_int" );
}
freight_shaft_kill_timeout( elevator_guard )
{
elevator_guard endon ("death");
level.baker ForceTeleport ( level.baker.origin, (0,315,0));
level.baker enable_cqbwalk();
level.baker cqb_aim( elevator_guard);
wait 4;
display_hint_timeout ("NX_SKYSCRAPER_HINT_USE_XRAY", 10);
wait 3;
// thread add_dialogue_line( "Baker", "He's right there, on the other side of the door. Look through your scope.", "green", 3 );
level.baker dialogue_queue( "sky_bak_shaft_lookthroughscope" );
wait 7;
// thread add_dialogue_line( "Baker", "Fine, I'll take care of him.", "green", 3 );
level.baker dialogue_queue( "sky_bak_shaft_illtakecareofhim" );
// level.baker SetLookAtEntity( elevator_guard );
level.baker shoot();
elevator_guard kill();
}
shaft_open_freight_door()
{
distance = 64;
normal = (0,0,0);
elevator_parts = GetEntArray( "freight_elevator_doors", "script_noteworthy" );
foreach( part in elevator_parts )
{
if ( IsDefined ( part.targetname) && part.targetname == "elevator_bottom")
{
forward = AnglesToRight( part.angles );
normal = VectorNormalize( forward );
// iprintln ("normal: " + normal);
}
}
foreach( part in elevator_parts )
{
if( IsDefined ( part.targetname) && part.targetname == "door_left")
{
part MoveTo( part.origin + (distance * normal), 4, .5, .5 );
}
if( IsDefined ( part.targetname) && part.targetname == "door_right")
{
part MoveTo( part.origin + (distance * normal * -1), 4, .5, .5 );
}
}
wait 4;
}
path_mesh_helper_delete()
{
// The path mesh helper is a script_brushmodel to build a pathmesh upon. It's deleted so the player can move up through it later
helper = GetEnt ("path_mesh_helper", "targetname");
helper Delete();
}
shaft_dialog()
{
// add_dialogue_line( "Baker", "Watch your step.", "green", 2 );
level.baker dialogue_queue( "sky_bak_shaft_watchstep" );
// add_dialogue_line( "Team A", "There's an elevator coming up shaft 3 that will take you to the transfer point.", "purple", 4 );
radio_dialogue ("sky_teama_shaft_elevatorshaft3");
flag_wait("shaft_player_past_pole");
// flag_wait ("ally_elevator_in_position");
// add_dialogue_line( "Baker", "Roger. Here comes our ride, Spectre.", "green", 3 );
level.baker dialogue_queue( "sky_bak_shaft_herecomesride" );
trigger2 = GetEnt ("player_ready_elevator_jump", "targetname");
trigger2 waittill ("trigger");
// level waittill ("freight_elevator_in_position");
wait 5;
// add_dialogue_line( "Baker", "Get ready to jump again.", "green", 2 );
level.baker dialogue_queue( "sky_bak_shaft_readytojumpagain" );
// flag_wait ("hooked_up");
wait 2;
// add_dialogue_line( "Team A", "Security elevator is heading your way now.", "purple", 2 );
radio_dialogue ("sky_teama_shaft_elevatoryourway");
level waittill ("shaft_vignette_done");
// add_dialogue_line( "Team A", "This is it, get ready to hook up.", "purple", 2 );
level.baker dialogue_queue( "sky_bak_shaft_getreadytohookup" );
flag_wait ("player_used_hook");
wait 3;
// add_dialogue_line( "Baker", "Team A, we're in the security shaft, ascending to the lab now.", "green", 2 );
level.baker dialogue_queue( "sky_bak_shaft_securityshaft" );
// add_dialogue_line( "Team A", "Copy that. Nice work.", "purple", 2 );
radio_dialogue ("sky_teama_shaft_nicework");
level waittill ("freight_elevator_stop");
// add_dialogue_line( "Team A", "Careful, there's a guard on the other side of the door.", "green", 2 );
radio_dialogue ("sky_teama_shaft_guarddoor");
// add_dialogue_line( "Baker", "Roger. Spectre, use your Lancer and take him out.", "green", 2 );
level.baker dialogue_queue( "sky_bak_shaft_uselancer" );
}