nx1-gsc-dump/maps/nx_skyscraper_drive_up.gsc

1095 lines
33 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;
//*******************************************************************
// DRIVE UP *
// *
//*******************************************************************
drive_up_start()
{
level._player maps\_nx_utility::move_player_to_start_point( "playerstart_drive_up" );
thread intro_text();
// Setup civvies
// thread civilian_control();
thread nonmoving_civilians_spawn();
thread lobby_guards_spawn();
thread lobby_uav_spawn();
thread traffic_control();
thread maps\nx_skyscraper_fx::set_vision_and_fog("exterior_ground_level", 0); // set appropriate vision and fog
// drive_up_sequence();
// Make elevator transparent at start.
thread fx_elevator_glass_cycle( 0, 999, "player_elevator" );
// Hide cloud ring.
thread fx_hide_cloud_ring();
thread lobby_elevator_behavior();
}
// Player starts in car, drives up and gets out, car drives away
drive_up_sequence()
{
enablePlayerWeapons( false );
// thread maps\nx_skyscraper_util::spawn_business_baker();
MAX_ROTATE_ANG = 80;
// This delay is here to allow traffic to propogate, adjust as necessary.
wait 2;
// level.baker = spawn_targetname ("ally_suit_spawner", true);
level.taxi = spawn_vehicle_from_targetname_and_drive( "script_vehicle_player" );
thread drive_up_dialog( level.taxi );
// Set up Baker
level.baker = level.taxi.riders[0];
level.baker ForceUseWeapon( "lancer_silencer_xray", "primary" );
level.baker ForceUseWeapon( "lancer", "secondary" );
level.baker gun_remove();
level.baker maps\nx_skyscraper_anim::enable_casual_lobby_anims();
level.baker SetIsVisibleInXray ( true );
level.baker thread magic_bullet_shield();
level.baker.animname = "ally_01";
level.driver = level.taxi.riders[1];
// Attach player to vehicle
player_rig = spawn_anim_model( "player_rig" );
player_rig.angles = level.taxi getTagAngles( "tag_driver" );
// Offset from passenger seat due to weird player rig location
player_rig.origin = level.taxi getTagOrigin( "tag_driver" ) - (0,0,90) + vector_multiply( (-1) * AnglesToForward( level.taxi.angles ), 35 );
player_rig linkTo( level.taxi, "tag_driver" );
player_rig hide();
// Orient the player's view to up at the skyscraper
initial_angles = GetEnt( "origin_player_initial_angles", "targetname" );
level._player SetPlayerAngles( initial_angles.angles );
level._player playerLinkToDelta( player_rig, "tag_player", 1.0, MAX_ROTATE_ANG, MAX_ROTATE_ANG, 60, 20 );
level._player allowCrouch( false );
thread drive_up_vignette_sfx();
// Other vehicles
thread drive_up_vtol_spawn();
thread walk_up_vtol_spawn();
thread drive_up_departing_taxi( "departing_taxi_2", "departing_taxi_path_start_2", "taxi_passenger_spawner_2" );
thread drive_up_departing_taxi( "departing_taxi_1", "departing_taxi_path_start_1", "taxi_passenger_spawner_1" );
thread walk_up_argument();
// thread slum_dwellers();
thread drive_up_monorail_motion();
// Start drive-in vignette
flag_set ("flag_intro_ride");
thread player_elevator_setup();
thread maps\nx_skyscraper_elevator::elevator_vertical_teleport( "player_elevator", 15 );
// Once car has stopped, have player get out
thread drive_up_player_taxi_behavior();
}
drive_up_vignette_sfx()
{
wait 0.1;
level._player playsound("scn_skyscraper_drive_up");
}
drive_up_player_taxi_behavior()
{
nearing_building = getVehicleNode("nearing_building", "script_noteworthy");
nearing_building waittill ( "trigger" );
thread traffic_short_loop();
level.taxi waittill( "reached_end_node" );
level notify ("taxi_parked");
wait 1.2;
level.taxi thread play_sound_on_entity( "scn_favela_npc_door_open" );
thread maps\_utility::set_ambient( "amb_skyscraper_city_ext" );
level notify( "exiting_vehicle" );
level.taxi notify( "door_open" );
// Fudge the player out of the cab until we get a proper exit animation
exit_point = getent( "player_vehicle_exit_point", "targetname" );
dummy = spawn( "script_model", level._player.origin );
dummy.angles = level._player.angles;
dummy setmodel( "tag_origin" );
level._player playerLinkTo( dummy, "tag_player", 1.0, 45, 45, 45, 20 );
MOVETIME = 1.5;
ACCEL = 0.3;
DECEL = 0.3;
dummy moveTo( exit_point.origin, MOVETIME, ACCEL, DECEL );
dummy rotateTo( exit_point.angles, MOVETIME, ACCEL, DECEL );
wait MOVETIME;
level._player unlink();
// Set up player for walking section
enablePlayerWeapons( true );
level._player allowCrouch( true );
level._player allowStand( true );
level._player setStance( "stand" );
// level._player TakeAllWeapons();
maps\nx_skyscraper_util::player_remove_abilities();
// Ally gets out of car
level.taxi thread play_sound_on_entity( "scn_favela_npc_door_open" );
level.taxi vehicle_unload();
wait 6.0;
// lobby_enter_sequence();
// Car drives away
exit_node = GetVehicleNode( "departing_taxi_path_start_player", "targetname" );
level.taxi StartPath( exit_node );
level.taxi waittill ("reached_end_node");
level.taxi delete();
level.driver delete();
}
drive_up_monorail_motion()
{
distance = 10000;
reference = GetEnt ("monorail_direction", "targetname");
direction = AnglesToForward ( reference.angles );
normalized_direction = VectorNormalize ( direction );
monorail = GetEntArray ("monorail", "targetname");
foreach ( car in monorail)
{
car MoveTo ( car.origin + (normalized_direction * distance), 20 );
}
monorail [ 0 ] waittill ("movedone");
foreach ( car in monorail )
{
car delete();
}
}
drive_up_dialog( vehicle )
{
wait 8;
//add_dialogue_line( "Lam", "This the place. Hard to miss it.", "green", 2 );
level.driver dialogue_queue( "sky_lam_driveup_thistheplace" );
//thread add_dialogue_line( "Baker", "These retinal masks had better work the first time.", "green", 2 );
level.baker dialogue_queue( "sky_bak_driveup_retinalmasks" );
nearing_building = getVehicleNode("nearing_building", "script_noteworthy");
nearing_building waittill ( "trigger" );
flag_set ("spawn_taxi_passengers");
//add_dialogue_line( "Baker", "Alright. It's go time.", "green", 2 );
level.baker dialogue_queue( "sky_bak_driveup_gotime" );
//add_dialogue_line( "Lam", "Team B should be in position shortly. Wait on their mark before going through security.", "green", 4 );
level.driver dialogue_queue( "sky_lam_driveup_teambinposition" );
vehicle waittill ("reached_end_node");
//add_dialogue_line( "Lam", "Okay, guys. Signal when you need an exfil. I'll stay within range.", "green", 3 );
level.driver dialogue_queue( "sky_lam_driveup_signalforexfil" );
//add_dialogue_line( "Lam", "Good luck.", "green", 2 );
level.driver dialogue_queue( "sky_lam_driveup_goodluck" );
//add_dialogue_line( "Baker", "Thanks, Lam. See you on the other side.", "green", 2 );
level.baker dialogue_queue( "sky_bak_driveup_thanksotherside" );
// spawn the baker nag function
thread drive_up_baker_nag();
}
intro_text()
{
wait 3;
lines = [];
// "Mission"
lines[ lines.size ] = &"NX_SKYSCRAPER_INTROSCREEN_LINE1";
// Time
lines[ "date" ] = &"NX_SKYSCRAPER_INTROSCREEN_LINE2";
// Character
lines[ lines.size ] = &"NX_SKYSCRAPER_INTROSCREEN_LINE3";
// Faction
lines[ lines.size ] = &"NX_SKYSCRAPER_INTROSCREEN_LINE4";
// Location
lines[ lines.size ] = &"NX_SKYSCRAPER_INTROSCREEN_LINE5";
maps\_introscreen::introscreen_feed_lines( lines );
}
civilian_control()
{
array_thread( GetEntArray( "civilian_spawner", "script_noteworthy" ), ::spawn_ai );
kill_volume = GetEnt("civilian_kill_volume", "targetname");
kill_volume2 = GetEnt("civilian_kill_volume2", "targetname");
spawner1_toggle = 1;
spawner2_toggle = 1;
while(1)
{
ai = GetAIArray();
foreach( guy in ai )
{
if(guy IsTouching(kill_volume) && !guy is_hero() )
{
//kill the dude and then spawn his replacement
guy Delete();
if (spawner1_toggle ==1)
{
replacement = spawn_targetname("replacement_spawner_coffee", true);
spawner1_toggle = 0;
}
else
{
replacement = spawn_targetname("replacement_spawner_pda", true);
spawner1_toggle = 1;
}
}
else if(guy IsTouching(kill_volume2) && !guy is_hero() )
{
//kill the dude and then spawn his replacement
guy Delete();
if (spawner2_toggle ==1)
{
replacement = spawn_targetname("replacement_spawner2_coffee", true);
spawner2_toggle = 0;
}
else
{
replacement = spawn_targetname("replacement_spawner2_pda", true);
spawner2_toggle = 1;
}
}
}
wait 1.0;
}
}
drive_up_vtol_spawn()
{
drive_up_vtol = spawn_vehicle_from_targetname_and_drive ("drive_up_vtol_spawner");
end = Getstruct ("drive_up_vtol_end", "targetname");
end waittill ("trigger");
drive_up_vtol delete();
}
walk_up_vtol_spawn()
{
walk_up_vtol = spawn_vehicle_from_targetname_and_drive ("walk_up_vtol_spawner");
end = Getstruct ("walk_up_vtol_end", "targetname");
end waittill ("trigger");
walk_up_vtol delete();
}
drive_up_baker_nag()
{
wait 10.0;
nag_volume = GetEnt( "volume_baker_nag1", "targetname" );
nag_number = 0;
while(1)
{
if( level._player IsTouching(nag_volume))
wait 1.0;
else
{
nag_number++;
if( nag_number > 4 )
break;
dialogue_index = randomintrange( 0, 2 );
switch( dialogue_index )
{
case 0:
//add_dialogue_line( "Baker", "Spectre! Stop sightseeing. We've got a mission to do.", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_stopsightseeing" );
break;
case 1:
//add_dialogue_line( "Baker", "Spectre! Get back over here!", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_getbackhere" );
break;
case 2:
//add_dialogue_line( "Baker", "Spectre! Where the hell are you going!", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_whereyougoing" );
break;
}
wait 3.0;
}
if( flag( "flag_baker_nag1" ))
break;
}
if( nag_number > 4 )
{
//add_dialogue_line( "Baker", "Team A has been compromised! Mission failure!", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_compromised" );
// maps\_utility::missionFailedWrapper();
}
// set up second nag box inside the lobby
nag_volume = GetEnt( "volume_baker_nag2", "targetname" );
nag_number = 0;
while(1)
{
if( level._player IsTouching(nag_volume))
wait 1.0;
else
{
nag_number++;
if( nag_number > 4 )
break;
dialogue_index = randomintrange( 0, 2 );
switch( dialogue_index )
{
case 0:
//add_dialogue_line( "Baker", "Spectre! Stop sightseeing. We've got a mission to do.", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_stopsightseeing" );
break;
case 1:
//add_dialogue_line( "Baker", "Spectre! Get back over here!", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_getbackhere" );
break;
case 2:
//add_dialogue_line( "Baker", "Spectre! Where the hell are you going!", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_whereyougoing" );
break;
}
wait 3.0;
}
if( flag( "flag_baker_nag2" ))
break;
}
if( nag_number > 4 )
{
//add_dialogue_line( "Baker", "Team A has been compromised! Mission failure!", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_compromised" );
// maps\_utility::missionFailedWrapper();
}
// set up third nag box leading to the elevator
nag_volume = GetEnt( "volume_baker_nag3", "targetname" );
nag_number = 0;
while(1)
{
if( level._player IsTouching(nag_volume))
wait 1.0;
else
{
nag_number++;
if( nag_number > 4 )
break;
dialogue_index = randomintrange( 0, 2 );
switch( dialogue_index )
{
case 0:
//add_dialogue_line( "Baker", "Spectre! Stop sightseeing. We've got a mission to do.", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_stopsightseeing" );
break;
case 1:
//add_dialogue_line( "Baker", "Spectre! Get back over here!", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_getbackhere" );
break;
case 2:
//add_dialogue_line( "Baker", "Spectre! Where the hell are you going!", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_whereyougoing" );
break;
}
wait 3.0;
}
if( flag( "flag_baker_nag3" ))
break;
}
if( nag_number > 4 )
{
//add_dialogue_line( "Baker", "Team A has been compromised! Mission failure!", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_compromised" );
// maps\_utility::missionFailedWrapper();
}
}
walk_up_argument()
{
civilian_argue = spawn_targetname( "civilian_argue", true );
//civilian_argue = GetEnt( "civilian_argue_model", "targetname" );
civilian_argue.animname = "civilian_argue";
security_guard_argue = spawn_targetname( "security_guard_argue", true );
security_guard_argue.animname = "security_guard_argue";
security_guard_argue gun_remove();
civilian_node = GetEnt( "node_anim_argument1", "script_noteworthy" );
guard_node = GetEnt( "node_anim_argument2", "script_noteworthy" );
civilian_node thread anim_loop_solo(civilian_argue, "civilian_directions_1_A", "stop_idle");
guard_node thread anim_loop_solo(security_guard_argue, "civilian_directions_1_B", "stop_idle");
level waittill ("clean_up_lobby");
civilian_argue delete();
security_guard_argue delete();
}
/*
slum_dwellers()
{
slum_dweller = spawn_targetname( "slum_dweller", true );
slum_dweller.animname = "slum_dweller";
slum_node = GetEnt( "node_slum_wave", "script_noteworthy" );
slum_dweller thread anim_loop_solo( slum_dweller, "unarmed_shout_window" );
}
*/
nonmoving_civilians_spawn()
{
level.lobby_civilians = [];
civilian_nodes = getnodearray( "civilian_animation", "targetname" );
civilian_nodes = array_combine( civilian_nodes, getentarray( "civilian_animation", "targetname" ) );
foreach( node in civilian_nodes )
{
assert( isdefined( node.script_noteworthy ) );
civilian = spawn_anim_model( "civilian" );
level.lobby_civilians [level.lobby_civilians.size] = civilian;
assert( isdefined( level._scr_anim[ civilian.animname ] ) );
assert( isdefined( level._scr_anim[ civilian.animname ][ node.script_noteworthy ] ) );
node thread anim_loop_solo( civilian, node.script_noteworthy );
//civilian animscripts\civilian\civilian_init_common::attachProps( node.script_noteworthy );
}
// clean up civs once player is in elevator.
level waittill ("clean_up_lobby");
foreach (civilian in level.lobby_civilians)
{
civilian delete();
}
}
drive_up_departing_taxi( taxi, node, passenger )
{
wait 1;
departing_taxi = spawn_vehicle_from_targetname ( taxi);
node = GetVehicleNode ( node , "targetname");
departing_taxi AttachPath ( node );
flag_wait ("spawn_taxi_passengers");
passenger_1 = spawn_targetname ( passenger );
passenger_1.disablearrivals = true;
guy_runtovehicle_load( passenger_1, departing_taxi );
// departing_taxi waittill ("vehicle_mount");
departing_taxi StartPath();
departing_taxi waittill ("reached_end_node");
departing_taxi delete();
}
//*******************************************************************
// LOBBY ENTER *
// *
//*******************************************************************
lobby_enter_start()
{
level._player maps\_nx_utility::move_player_to_start_point( "playerstart_lobby_enter" );
thread maps\nx_skyscraper_fx::set_vision_and_fog("interior", 0); // set appropriate vision and fog
maps\nx_skyscraper_util::player_remove_abilities();
maps\nx_skyscraper_util::spawn_business_baker();
issue_color_orders( "r0", "allies" );
level.baker gun_remove();
level.baker maps\nx_skyscraper_anim::enable_casual_lobby_anims();
thread player_elevator_setup();
thread maps\nx_skyscraper_elevator::elevator_vertical_teleport( "player_elevator", 15 );
baker_teleport = GetEnt ("baker_lobby_teleport", "targetname");
level.baker ForceTeleport( baker_teleport.origin, baker_teleport.angles);
// thread civilian_control();
thread nonmoving_civilians_spawn();
thread lobby_guards_spawn();
//lobby_enter_sequence();
// Make elevator transparent at start.
thread fx_elevator_glass_cycle( 0, 999, "player_elevator" );
// Hide cloud ring.
thread fx_hide_cloud_ring();
thread lobby_elevator_behavior();
thread lobby_uav_spawn();
}
lobby_enter_sequence()
{
thread autosave_now();
// thread lobby_baker_vignettes();
thread maps\nx_skyscraper_util::play_pip_bink( "skyscraper_elevator_pip", undefined, "play_elevator_pip" );
thread lobby_dialog();
lobby_vision_transition();
thread lobby_security_scan_baker();
lobby_security_scan_player();
}
player_elevator_setup()
{
// Link use trigger to elevator
use_trigger = GetEnt ("player_ready_for_elevator_lift", "targetname");
link = GetEnt ("player_elevator_anim_node", "targetname");
use_trigger EnableLinkTo();
use_trigger LinkTo ( link );
}
/*
lobby_baker_vignettes()
{
flag_wait ("flag_lobby_airlock");
maps\nx_skyscraper_anim::lobby_airlock_spawn();
flag_wait ("flag_lobby_walk");
maps\nx_skyscraper_anim::lobby_walk_spawn();
flag_wait ("flag_security_baker");
maps\nx_skyscraper_anim::security_baker_spawn();
}
*/
lobby_vision_transition()
{
trigger = GetEnt ("entering_lobby", "targetname");
trigger waittill ("trigger");
thread maps\nx_skyscraper_fx::set_vision_and_fog("interior", 2); // set appropriate vision and fog
}
lobby_security_scan_baker()
{
trigger = GetEnt ("in_security_scan", "targetname");
while ( !level.baker isTouching ( trigger ))
{
wait .5;
}
// iprintln ("baker passing through security");
}
lobby_security_scan_player()
{
level notify ("player_scanner_ready");
trigger = GetEnt ("in_security_scan", "targetname" );
while ( !level._player isTouching ( trigger ))
{
wait .5;
}
scanners = GetEntArray ("retinal_scanner", "targetname");
array_thread ( scanners, ::lobby_retinal_scanner );
}
lobby_retinal_scanner( )
{
level endon ("player_through_security");
while (1)
{
dist = Distance ((level._player.origin + (0,0,32)), self.origin);
if ( player_looking_at( self.origin ) && (dist < 32) )
break;
wait .1;
}
thread maps\_introscreen::introscreen_generic_white_fade_in( .25, .25 );
level._player playsound("skyscraper_security_scanner");
blocker = GetEnt ("security_player_blocker", "targetname");
blocker delete();
level notify ("player_through_security");
}
lobby_dialog()
{
// trigger = GetEnt ("entering_lobby", "targetname");
// trigger waittill ("trigger");
// set the flag to stop the first nagging trigger
flag_wait ("flag_lobby_airlock");
// add_dialogue_line( "Baker", "Just stay cool. Remember, we're here on business.", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_staycool" );
// add_dialogue_line( "Team A", "Team B, we're in position. You are clear to proceed.", "purple", 2 );
radio_dialogue ( "sky_teama_lobby_inposition" );
// add_dialogue_line( "Baker", "Copy. We're going through security now.", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_security" );
flag_set( "flag_baker_nag1" );
//flag_set( "flag_baker_nag2" );
/*
trigger = GetEnt ("baker_approaches_security", "targetname");
trigger waittill ("trigger");
level.lobby_guard_2 SetLookAtEntity ( level.baker);
issue_color_orders( "r2", "allies" );
*/
flag_wait ("flag_security_baker");
// add_dialogue_line( "Guard", "Sir, you must look into the screen before entering.", "red", 2 );
level.lobby_guard_1 dialogue_queue( "sky_grd_lobby_lookintoscreen" );
// add_dialogue_line( "Baker (To Guard)", "I just look in here?", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_lookinhere" );
// issue_color_orders( "r3", "allies" );
// add_dialogue_line( "Guard", "Thank you, sir. Please step through.", "red", 2 );
level.lobby_guard_1 dialogue_queue( "sky_grd_lobby_thankyou" );
// add_dialogue_line( "Baker (To Guard)", "Heck, that was nothing compared the airport. You guys really run a tight ship.", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_airport" );
issue_color_orders( "r4", "allies" );
level.lobby_guard_2 StopLookAt( 1 );
//level waittill ("player_through_security");
// add_dialogue_line( "Baker", "Okay, that was the easy part.", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_easypart" );
flag_set ("play_elevator_pip");
flag_wait ("player_elevator_ready");
issue_color_orders( "r6", "allies" );
// add_dialogue_line( "Baker", "Team A, we're entering elevator number 5.", "green", 2 );
level.baker dialogue_queue( "sky_bak_lobby_enteringelevator" );
// add_dialogue_line( "Team A", "Copy. We'll meet you above.", "purple", 2 );
// radio_dialogue( "sky_teama_lobby_meetyouabove" );
// No they won't.
}
lobby_player_nag()
{
}
lobby_guards_spawn()
{
thread lobby_airlock_guard();
level.lobby_guard_1 = spawn_targetname ("security_checkpoint_guard_spawner_3");
level.lobby_guard_1.animname = "guard";
level.lobby_guard_2 = spawn_targetname ("security_checkpoint_guard_spawner_4");
level.lobby_guard_2.animname = "guard";
wait 1;
node_1 = GetEnt ("checkpoint_guard_node_3", "script_noteworthy");
node_2 = GetEnt ("checkpoint_guard_node_4", "script_noteworthy");
node_1 thread anim_loop_solo ( level.lobby_guard_1, "platform_idle_loop", "stop_idle");
node_2 thread anim_loop_solo ( level.lobby_guard_2, "platform_idle_loop", "stop_idle");
level waittill ("clean_up_lobby");
level.lobby_guard_1 delete();
level.lobby_guard_2 delete();
}
lobby_airlock_guard()
{
guard = spawn_targetname ("airlock_guard_spawner");
guard SetLookAtEntity ( level._player );
level waittill ("clean_up_lobby");
guard delete();
}
lobby_uav_spawn()
{
lobby_uav_spawner = GetEnt("lobby_uav1", "targetname");
lobby_uav1 = lobby_uav_spawner maps\_attack_heli::SAV_setup( "pathing" );
lobby_uav1.ignoreme = true;
lobby_uav1.ignoreall = true;
lobby_uav1 Vehicle_SetSpeed( 8 );
lobby_uav_spawner2 = GetEnt("lobby_uav2", "targetname");
lobby_uav2 = lobby_uav_spawner2 maps\_attack_heli::SAV_setup( "pathing" );
lobby_uav2.ignoreme = true;
lobby_uav2.ignoreall = true;
lobby_uav2 Vehicle_SetSpeed( 8 );
spawners = GetEntArray( "driveup_uav", "script_noteworthy" );
foreach( spawner in spawners )
{
driveup_uav = spawner maps\_attack_heli::SAV_setup( "pathing" );
driveup_uav.ignoreme = true;
driveup_uav.ignoreall = true;
driveup_uav Vehicle_SetSpeed( 8 );
}
// UAV carrying sign
driveup_uav_spawner = GetEnt("uav_with_ad", "targetname");
driveup_uav = driveup_uav_spawner maps\_attack_heli::SAV_setup( "pathing" );
driveup_uav.ignoreme = true;
driveup_uav.ignoreall = true;
driveup_uav Vehicle_SetSpeed( 8 );
driveup_uav2_spawner = GetEnt("uav_with_ad2", "targetname");
driveup_uav2 = driveup_uav2_spawner maps\_attack_heli::SAV_setup( "pathing" );
driveup_uav2.ignoreme = true;
driveup_uav2.ignoreall = true;
driveup_uav2 Vehicle_SetSpeed( 8 );
ad_on_uav = GetEnt( "ad_on_uav", "targetname" );
//ad_on_uav linkto( driveup_uav, "tag_flash" );
ad_on_uav hide();
ad_on_uav2 = GetEnt( "ad_on_uav2", "targetname" );
//ad_on_uav2 linkto( driveup_uav2, "tag_flash" );
ad_on_uav2 hide();
//ad_on_uav advert_flicker();
//ad_on_uav2 advert_flicker();
level waittill ("clean_up_lobby");
lobby_uav1 delete();
lobby_uav2 delete();
driveup_uav delete();
driveup_uav2 delete();
}
/*
advert_flicker()
{
while(1)
{
wait 2.5;
self hide();
wait 0.1;
self show();
wait 0.1;
self hide();
wait 0.05;
self show();
}
}
*/
traffic_control()
{
// Throw in a pattern of traffic here. Currently uses a for loop for easy scaling.
for ( i = 0; i < 1; i++)
{
thread traffic_car_one_way( "traffic_car_1", "traffic_start_1" );
wait .2;
thread traffic_moto_one_way( "traffic_moto_1", "traffic_start_2" );
thread traffic_car_one_way( "traffic_car_2", "player_taxi_path_other" );
wait .2;
thread traffic_moto_one_way( "traffic_moto_2", "traffic_start_1" );
wait .3;
thread traffic_moto_one_way( "traffic_car_3", "traffic_start_2" );
thread traffic_car_one_way( "traffic_moto_1", "player_taxi_path_other" );
wait .1;
thread traffic_car_one_way( "traffic_car_4", "traffic_start_1" );
wait .3;
thread traffic_moto_one_way( "traffic_moto_2", "traffic_start_2" );
wait .1;
thread traffic_car_one_way( "traffic_car_1", "player_taxi_path_other" );
wait .2;
thread traffic_moto_one_way( "traffic_moto_1", "traffic_short_loop_start_1" );
thread traffic_car_one_way( "traffic_car_2", "traffic_short_loop_start_2" );
wait .2;
thread traffic_moto_one_way( "traffic_moto_2", "player_taxi_short_loop_start" );
wait .3;
thread traffic_moto_one_way( "traffic_car_3", "traffic_start_1" );
thread traffic_car_one_way( "traffic_car_4", "traffic_start_2" );
wait .1;
thread traffic_car_one_way( "traffic_car_1", "player_taxi_short_loop_start" );
wait .2;
thread traffic_moto_one_way( "traffic_moto_1", "traffic_short_loop_start_1" );
wait .3;
thread traffic_car_one_way( "traffic_car_2", "traffic_short_loop_start_2" );
wait .2;
thread traffic_moto_one_way( "traffic_moto_2", "player_taxi_short_loop_start" );
wait .3;
thread traffic_moto_one_way( "traffic_moto_1", "traffic_start_1" );
thread traffic_car_one_way( "traffic_car_3", "traffic_start_2" );
wait .1;
}
}
traffic_short_loop()
{
thread traffic_control_upper();
// Does a shorter loop which encompasses the area visible from the front fo the building, to give the impression of higher traffic density
for ( i = 0; i < 3; i++)
{
thread traffic_car_loop( "traffic_car_1", "traffic_short_loop_start_1" );
wait 1.2;
thread traffic_moto_loop( "traffic_moto_1", "traffic_short_loop_start_2" );
wait .3;
thread traffic_car_loop( "traffic_car_2", "player_taxi_short_loop_start" );
wait 1.2;
thread traffic_moto_loop( "traffic_moto_2", "traffic_short_loop_start_1" );
wait 1.3;
thread traffic_moto_loop( "traffic_moto_1", "traffic_short_loop_start_2" );
wait .4;
thread traffic_car_loop( "traffic_car_3", "player_taxi_short_loop_start" );
wait 1.1;
thread traffic_car_loop( "traffic_car_4", "traffic_short_loop_start_1" );
wait .3;
thread traffic_moto_loop( "traffic_moto_2", "traffic_short_loop_start_2" );
wait 1.1;
}
}
traffic_control_upper()
{
for ( i = 0; i < 3; i++)
{
thread traffic_car_loop( "traffic_car_5", "traffic_start_upper_1" );
wait .5;
thread traffic_car_loop( "traffic_car_6", "traffic_start_upper_2" );
wait .4;
thread traffic_car_loop( "traffic_car_7", "traffic_start_upper_2" );
wait .6;
thread traffic_car_loop( "traffic_car_8", "traffic_start_upper_1" );
wait .4;
}
}
traffic_car_one_way( car_spawner, path_start_targetname )
{
// Spawn a car and set it on a path.
path_start = GetVehicleNode ( path_start_targetname, "targetname");
car = spawn_vehicle_from_targetname( car_spawner );
car AttachPath ( path_start);
car StartPath();
// When the car reaches the end point
car waittill ("reached_end_node");
car delete();
}
traffic_moto_one_way( moto_spawner, path_start_targetname )
{
// Spawn a motorcycle and set it on a path.
path_start = GetVehicleNode ( path_start_targetname, "targetname");
moto = spawn_vehicle_from_targetname( moto_spawner );
moto AttachPath ( path_start);
moto StartPath();
// Create a rider, link him to the motorcycle, and put him in a "riding" position
rider = spawn_anim_model ( "rider", ( moto.origin ));
rider_node = spawn ("script_origin", moto.origin);
rider_node linkto (moto, "tag_origin", ( 0, 0, 20), (0, 0, 0) );
rider linkto (rider_node );
rider_node thread anim_loop_solo(rider, "forward" );
// When the car reaches the end point
moto waittill ("reached_end_node");
//... delete everything.
moto delete();
rider delete();
rider_node delete();
}
traffic_car_loop( car_spawner, path_start_targetname )
{
// Spawn a car and set it on a path.
path_start = GetVehicleNode ( path_start_targetname, "targetname");
car = spawn_vehicle_from_targetname( car_spawner );
car AttachPath ( path_start);
car StartPath();
// While the player has not yet entered the elevator...
while ( !flag ("elevator_in_motion") )
{
// When the car reaches the end point
car waittill ("reached_end_node");
// start it back at the beginning.
car AttachPath ( path_start);
car StartPath();
}
car delete();
}
traffic_moto_loop( moto_spawner, path_start_targetname )
{
// Spawn a motorcycle and set it on a path.
path_start = GetVehicleNode ( path_start_targetname, "targetname");
moto = spawn_vehicle_from_targetname( moto_spawner );
moto AttachPath ( path_start);
moto StartPath();
// Create a rider, link him to the motorcycle, and put him in a "riding" position
rider = spawn_anim_model ( "rider", ( moto.origin ));
rider_node = spawn ("script_origin", moto.origin);
rider_node linkto (moto, "tag_origin", ( 0, 0, 20), (0, 0, 0) );
rider linkto (rider_node );
rider_node thread anim_loop_solo(rider, "forward" );
// While the player has not yet entered the elevator...
while ( !flag ("elevator_in_motion") )
{
// When the car reaches the end point
moto waittill ("reached_end_node");
// start it back at the beginning.
moto AttachPath ( path_start);
moto StartPath();
}
//... delete everything.
moto delete();
rider delete();
rider_node delete();
}
lobby_elevator_behavior()
{
thread fx_elevator_glass_cycle( 0, 999, "elevator_1" );
thread fx_elevator_glass_cycle( 0, 999, "elevator_2" );
thread fx_elevator_glass_cycle( 0, 999, "elevator_3" );
thread fx_elevator_glass_cycle( 0, 999, "elevator_5" );
level.passengers = [];
lobby_elevator_passenger_spawn( "elevator_1" );
lobby_elevator_passenger_spawn( "elevator_2" );
lobby_elevator_passenger_spawn( "elevator_3" );
lobby_elevator_passenger_spawn( "player_elevator" );
lobby_elevator_passenger_spawn( "elevator_5" );
trigger = GetEnt ("entering_lobby", "targetname");
trigger waittill ("trigger");
thread lobby_player_elevator_descent( );
thread maps\nx_skyscraper_elevator::elevator_pattern_1 ("elevator_5", 8, 9, "elevator_5_passenger_path_start");
wait 2.6;
thread maps\nx_skyscraper_elevator::elevator_pattern_1 ("elevator_2", 2, 3, "elevator_2_passenger_path_start");
wait 3.4;
thread maps\nx_skyscraper_elevator::elevator_pattern_1 ("elevator_3", 4, 5, "elevator_3_passenger_path_start");
wait 4.7;
thread maps\nx_skyscraper_elevator::elevator_pattern_1 ("elevator_1", 0, 1, "elevator_1_passenger_path_start");
}
lobby_elevator_passenger_spawn( elevator )
{
node_1 = undefined;
node_2 = undefined;
// Get all the entities in the elevator
elevator_parts = GetEntArray( elevator , "script_noteworthy" );
// Find the spawners, spawn the passengers, and link them to their nodes
foreach( part in elevator_parts )
{
if( isdefined (part.targetname) && part.targetname == "elevator_anim_node_1" )
{
node_1 = part;
}
if( isdefined (part.targetname) && part.targetname == "elevator_anim_node_2" )
{
node_2 = part;
}
}
// Wait until the nodes are defined before continuing.
waittillframeend;
foreach( part in elevator_parts )
{
if( isdefined (part.targetname) && part.targetname == "elevator_passenger_spawner_1" )
{
passenger_1 = part spawn_ai ();
passenger_1 linkto ( node_1 );
passenger_1.goalradius = 32;
level.passengers [level.passengers.size] = passenger_1;
}
if( isdefined (part.targetname) && part.targetname == "elevator_passenger_spawner_2" )
{
passenger_2 = part spawn_ai ();
passenger_2 linkto ( node_2 );
passenger_2.goalradius = 32;
level.passengers [level.passengers.size] = passenger_2;
}
}
}
lobby_player_elevator_descent( )
{
trigger = GetEnt ("obj_enter_elevator", "targetname");
trigger waittill ( "trigger" );
thread maps\nx_skyscraper_elevator::elevator_vertical_move( "player_elevator", -15, 8 );
wait 6;
thread fx_elevator_glass_cycle( 0, 1, "player_elevator" );
wait 3;
// elevator notify ("at_ground_floor");
thread maps\nx_skyscraper_elevator::elevator_door_move ( "player_elevator", "open");
maps\nx_skyscraper_elevator::elevator_door_move ( "player_elevator_facade", "open");
level.passengers[6] thread goal_node_target_pathing( "elevator_4_passenger_path_start" );
wait .5;
level.passengers[7] thread goal_node_target_pathing( "elevator_4_passenger_path_start" );
flag_set ("player_elevator_ready");
}
goal_node_target_pathing( node_targetname )
{
level endon ("elevator_out_lift_done");
self unlink();
node = GetNode ( node_targetname, "targetname");
self SetGoalNode ( node );
while ( 1 )
{
self waittill ("goal");
if ( !isdefined ( node.target))
break;
new_node = GetNode (node.target, "targetname");
self SetGoalNode (new_node);
node = new_node;
}
self delete();
}