nx1-gsc-dump/maps/nx_lava_station_2.gsc

822 lines
24 KiB
Plaintext
Raw Blame History

//****************************************************************************
// **
// Confidential - (C) Activision Publishing, Inc. 2010 **
// **
//****************************************************************************
// **
// Module: Lava Station 2 **
// **
// Created: 07/25/10 - Travis Chen (trchen x 4143) **
// **
//****************************************************************************
#include maps\_utility;
#include common_scripts\utility;
#include maps\_vehicle;
#include maps\_nx_vignette_util;
//*******************************************************************
// *
// *
//*******************************************************************
section_main()
{
// Dead crew member logic
thread maps\nx_lava_anim::dead_crew();
}
//*******************************************************************
// *
// *
//*******************************************************************
section_precache()
{
}
section_flag_inits()
{
flag_init( "station_2_elevator_moving" );
flag_init( "station_2_elevator_ready_keene" );
flag_init( "station_2_elevator_ready_tillman" );
flag_init( "vignette_keene_standoff_done" );
}
//*******************************************************************
// *
// *
//*******************************************************************
section_objectives( objective_num )
{
flag_wait( "player_off_train_1" );
// Go to bridge
waypoint = getEnt( "station_2_elevator_waypoint", "targetname" );
objective_add( objective_num, "current", &"NX_LAVA_OBJECTIVE_STATION_2_ELEVATOR", waypoint.origin );
objective_current( objective_num );
flag_wait( "station_2_elevator_moving" );
objective_complete( objective_num );
objective_num++;
flag_wait( "vignette_keene_standoff_done" );
// Go to bridge
waypoint = getEnt( "station_2_train_waypoint", "targetname" );
objective_add( objective_num, "current", &"NX_LAVA_OBJECTIVE_STATION_2_TRAIN", waypoint.origin );
objective_current( objective_num );
flag_wait( "vignette_bridge_to_train_jump" );
objective_complete( objective_num );
objective_num++;
return objective_num;
}
//*******************************************************************
// *
// *
//*******************************************************************
station_2_VO()
{
}
//*******************************************************************
// *
// *
//*******************************************************************
station_2_start( start_point )
{
station_2_start_shared( "train_1_station_2_start" );
}
station_2_start_shared( start_point )
{
thread maps\nx_lava_fx::set_vision_and_fog("station1", 0);
level._player TakeAllWeapons();
level._player GiveWeapon( "lunarrifle" );
level._player GiveWeapon( "spas12" );
level._player SwitchToWeapon( "lunarrifle" );
// Setup train 1 and do move
level thread maps\nx_lava_train_1::train_1_setup();
level thread station_2_start_train_1_move( start_point );
flag_set( "train_1_moving" );
// Spawn the allies
maps\nx_lava_util::lava_ally_spawn( "train_1" );
wait( 0.05 );
// Ally thread
maps\nx_lava_train_1::train_1_setup_locked_combat_nodes();
level.keene maps\_locked_combat::init_locked_combat( "train_1_keene_fixed_node" );
level.tilman maps\_locked_combat::init_locked_combat( "train_1_tillman_fixed_node" );
// Link player to train
level.train_1[0] maps\_nx_moving_platform::init_player_start();
}
station_2_start_train_1_move( start_point )
{
// Move front vehicle
vehicle_node = GetVehicleNode( start_point, "targetname" );
level.train_1[0].vehicle AttachPath( vehicle_node );
level.train_1[0].vehicle Vehicle_SetSpeed( 55, 10000, 10 );
level.train_1[0].vehicle GoPath();
if( start_point == "train_1_station_2_start" )
{
trigger_wait( "train_1_decel_2", "targetname" );
}
maps\nx_lava_util::set_train_speed( level.train_1, 6, 15, 2 );
level thread maps\nx_lava_train_1::train_1_open_doors();
// Wait till stop
level.train_1[0].vehicle waittill( "reached_end_node" );
flag_set( "train_1_stop" );
}
station_2()
{
// VO
level thread station_2_VO();
// Enemy thread
level thread station_2_enemy_thread();
}
//*******************************************************************
// *
// *
//*******************************************************************
station_2_keene_thread()
{
self endon( "death" );
flag_wait( "train_1_stop" );
// Stop locked combat
self.locked_combat = undefined;
self notify( "killanimscript" );
self unlink();
node = GetNode( "station_2_arrive_keene", "targetname" );
self SetGoalNode( node );
self set_force_color( "c" );
}
station_2_tilman_thread()
{
self endon( "death" );
flag_wait( "train_1_stop" );
// Stop locked combat
self.locked_combat = undefined;
self notify( "killanimscript" );
self unlink();
node = GetNode( "station_2_arrive_tilman", "targetname" );
self SetGoalNode( node );
self set_force_color( "b" );
}
//*******************************************************************
// *
// *
//*******************************************************************
station_2_enemy_thread()
{
// DECEL
enemy_station_2_decel_spawners = GetEntArray( "enemy_station_2_decel_wave_0", "targetname" );
array_thread( enemy_station_2_decel_spawners, ::add_spawn_function, ::enemy_station_2_decel_spawn_func );
enemy_station_2_decel_spawners = GetEntArray( "enemy_station_2_decel_wave_1", "targetname" );
array_thread( enemy_station_2_decel_spawners, ::add_spawn_function, ::enemy_station_2_decel_spawn_func );
enemy_station_2_decel_spawners = GetEntArray( "enemy_station_2_decel_wave_2", "targetname" );
array_thread( enemy_station_2_decel_spawners, ::add_spawn_function, ::enemy_station_2_decel_spawn_func );
enemy_station_2_decel_spawners = GetEntArray( "enemy_station_2_decel_wave_3", "targetname" );
array_thread( enemy_station_2_decel_spawners, ::add_spawn_function, ::enemy_station_2_decel_spawn_func );
enemy_station_2_decel_spawners = GetEntArray( "enemy_station_2_decel_wave_4", "targetname" );
array_thread( enemy_station_2_decel_spawners, ::add_spawn_function, ::enemy_station_2_decel_spawn_func );
}
enemy_station_2_decel_spawn_func()
{
self endon( "death" );
self.script_forcegoal = 1;
self enable_cqbwalk();
self.dontmelee = true;
self.no_gib = true;
flag_wait( "enemy_station_2_decel_delete" );
self delete();
}
enemy_train_decel_ambush()
{
self endon( "death" );
flag_wait( "train_1_stop" );
// Ambush player
self clear_force_color();
self.maxsightdistsqrd = 4000 * 4000;
self.favoriteenemy = level._player;
self.pathrandompercent = 200;
self SetGoalEntity( level._player );
self.goalradius = 400;
}
//*******************************************************************
// *
// *
//*******************************************************************
station_2_arrive_VO()
{
flag_wait( "train_1_stop" );
//thread add_dialogue_line( "Baker", "Move into the building.", "w" );
radio_dialogue( "lava_bak_st2_moveintobuilding" );
flag_wait( "player_off_train_1" );
wait( 1.0 );
//thread add_dialogue_line( "Baker", "Bodies haven't iced yet. Ten minutes. Maybe less.", "w" );
radio_dialogue( "lava_bak_st2_bodiesiced" );
wait( 1.0 );
// Serrano - "I recognize this blade work. (beat) Keene killed these mean."
radio_dialogue( "lava_ser_st2_bladework" );
//thread add_dialogue_line( "Baker", "Move out.", "w" );
radio_dialogue( "lava_bak_st2_moveout" );
flag_wait( "station_2_elevator_moving" );
wait( 3.0 );
// Serrano - "Why hasn't he handed that nuke over to the Snakes? What's he waiting for?"
radio_dialogue( "lava_ser_st2_handovernuke" );
flag_wait( "vignette_keene_standoff" );
wait( 2.5 );
//thread add_dialogue_line( "Keene", "Walker?", "r" );
radio_dialogue( "lava_kee_st2_walker" );
//wait( 1.0 );
//thread add_dialogue_line( "Baker", "We finally caught up with you<6F> traitor!", "w" );
radio_dialogue( "lava_bak_st2_traitor" );
//wait( 1.5 );
//thread add_dialogue_line( "Keene", "I'm no fuckin' Snake!", "r" );
radio_dialogue( "lava_kee_st2_nosnake" );
//wait( 2.0 );
//thread add_dialogue_line( "Baker", "You wasted Griff. You betrayed your brokers, your country<72> everything.", "w" );
radio_dialogue( "lava_bak_st2_betrayed" );
//wait( 3.0 );
//thread add_dialogue_line( "Keene", "You don't believe that, Baker. (beat) If you did, I'd already be dead.", "w" );
//radio_dialogue( "lava_kee_st2_dontbelievethat" );
//wait( 2.0 );
//thread add_dialogue_line( "Baker", "Then why don't you explain what the fuck you're doing with my warhead!", "w" );
//wait( 2.0 );
//thread add_dialogue_line( "Keene", "Griff was dead when I found him. He was there too<6F>", "w" );
//wait( 1.0 );
//thread add_dialogue_line( "Baker", "Who?", "w" );
//wait( 0.5 );
//thread add_dialogue_line( "Keene", "The traitor! He was stealing the warhead. I shot first. Winged him. He dropped it and ran.", "w" );
//wait( 1.5 );
//thread add_dialogue_line( "Keene", "I thought I was the only one left. I didn't know what else to do.", "r" );
//radio_dialogue( "lava_kee_st2_onlyoneleft" );
//wait( 1.5 );
//thread add_dialogue_line( "Baker", "You came all the way out here to finish the mission alone?", "w" );
//radio_dialogue( "lava_bak_st2_finishmission" );
//wait( 1.0 );
//thread add_dialogue_line( "Keene", "What would you do?", "r" );
//radio_dialogue( "lava_kee_st2_whatwouldyoudo" );
//wait( 0.5 );
// Serrano - "Hate to interupt but we've got hostile technicals approaching fast!"
radio_dialogue( "lava_ser_st2_hostiles" );
//thread add_dialogue_line( "Keene", "Button up! ", "r" );
//radio_dialogue( "lava_kee_st2_buttonup" );
wait( 0.5 );
}
//*******************************************************************
// *
// *
//*******************************************************************
station_2_arrive_start()
{
station_2_start_shared( "train_1_station_2_arrive_start" );
}
station_2_arrive()
{
// VO
level thread station_2_arrive_VO();
// Enemy thread
level thread station_2_enemy_arrive_thread();
// Ally thread
level.keene thread station_2_keene_thread();
level.tilman thread station_2_tilman_thread();
// Elevator
level thread station_2_elevator_thread();
// Keene Standoff Vignette
level thread station_2_keene_standoff_vignette();
flag_wait( "train_1_stop" );
level thread autosave_now();
level.keene maps\nx_lava_util::ally_protect();
level.tilman maps\nx_lava_util::ally_protect();
flag_wait( "vignette_keene_standoff_done" );
}
station_2_enemy_arrive_thread()
{
// ARRIVE
enemy_station_2_arrive_spawners = GetEntArray( "enemy_station_2_arrive_wave_0", "targetname" );
array_thread( enemy_station_2_arrive_spawners, ::add_spawn_function, ::enemy_station_2_arrive_spawn_func );
enemy_station_2_arrive_spawners = GetEntArray( "enemy_station_2_arrive_wave_1", "targetname" );
array_thread( enemy_station_2_arrive_spawners, ::add_spawn_function, ::enemy_station_2_arrive_spawn_func );
enemy_station_2_arrive_spawners = GetEntArray( "enemy_station_2_arrive_wave_2", "targetname" );
array_thread( enemy_station_2_arrive_spawners, ::add_spawn_function, ::enemy_station_2_arrive_spawn_func );
}
enemy_station_2_arrive_spawn_func()
{
self endon( "death" );
self.script_forcegoal = 1;
self enable_cqbwalk();
self.dontmelee = true;
self.no_gib = true;
self.ignoresuppression = true;
}
//*******************************************************************
// *
// *
//*******************************************************************
station_2_elevator_thread()
{
station_2_move_allies_to_elevator();
// Wait for player to use lev
use = GetEnt( "station_2_elevator_use", "targetname" );
use sethintstring( &"NX_LAVA_STATION_2_ELEVATOR_CONTROLS" );
use waittill( "trigger" );
use trigger_off();
flag_set( "station_2_elevator_moving" );
// Front
door_front_r = link_elevator_door( "station_2_elevator_door_front_r", "station_2_elevator_door_front_r_link" );
door_front_l = link_elevator_door( "station_2_elevator_door_front_l", "station_2_elevator_door_front_l_link" );
// Rear
door_rear_r = link_elevator_door( "station_2_elevator_door_rear_r", "station_2_elevator_door_rear_r_link" );
door_rear_l = link_elevator_door( "station_2_elevator_door_rear_l", "station_2_elevator_door_rear_l_link" );
// Close Front
door_front_r MoveY( 44, 3, .05, .5 );
door_front_l MoveY( -44, 3, .05, .5 );
wait( 3 );
// Command Center elevator ents
station_2_elevator = GetEnt( "station_2_elevator", "targetname" );
station_2_elevator_link = GetEntArray( "station_2_elevator_link", "targetname" );
// Link elevator parts
foreach( linker in station_2_elevator_link )
{
linker LinkTo( station_2_elevator );
}
// Move the elevator
level.keene linkTo( station_2_elevator );
level.tilman linkTo( station_2_elevator );
// actually move the elevator
station_2_elevator MoveZ( 204, 8, .05, 1 );
thread audio_station2_pressurize();
wait( 8 + 1 );
// Open rear
door_rear_r Unlink();
door_rear_l Unlink();
door_rear_r MoveY( -44, 3, .05, .5 );
door_rear_l MoveY( 44, 3, .05, .5 );
wait( 3 );
}
audio_station2_pressurize()
{
level._player playsound( "nx_lunar_pressurize" );
wait 1.5;
thread maps\_utility::set_ambient( "nx_lava_pressurized" );
level._player setchannelvolumes( "snd_channelvolprio_level", "nx_lava_pressurized", 5.5 );
wait 3;
level._player_helmet_loop = "amb_space_suit_null";
}
station_2_move_allies_to_elevator()
{
flag_wait( "station_2_move_allies_to_elevator" );
// Enable CQB
level.keene enable_cqbwalk();
level.tilman enable_cqbwalk();
// move allies to elevator
level.keene disable_ai_color();
node = getNode( "station_2_elevator_keene_goal", "targetname" );
level.keene SetGoalNode( node );
wait( 2.0 );
level.tilman disable_ai_color();
node = getNode( "station_2_elevator_tillman_goal", "targetname" );
level.tilman SetGoalNode( node );
level.keene thread station_2_elevator_ready_check( "keene" );
level.tilman thread station_2_elevator_ready_check( "tillman" );
flag_wait( "station_2_elevator_ready_keene" );
flag_wait( "station_2_elevator_ready_tillman" );
}
station_2_elevator_ready_check( name )
{
self waittill( "goal" );
flag_set( "station_2_elevator_ready_" + name );
}
link_elevator_door( link_to_name, link_name )
{
link_array = GetEntArray( link_name, "targetname" );
link_to = GetEnt( link_to_name, "script_noteworthy" );
foreach( link in link_array )
{
link LinkTo( link_to );
}
return link_to;
}
//*******************************************************************
// *
// *
//*******************************************************************
station_2_keene_standoff_vignette()
{
flag_wait( "vignette_keene_standoff" );
// tagTC<temp> - delete old allies until we get the character swap correct
level.keene stop_magic_bullet_shield();
level.tilman stop_magic_bullet_shield();
level.keene delete();
level.tilman delete();
// Spawn actors for scene
station_2_keene_standoff_spawn();
skimmer = vignette_vehicle_spawn("keene_standoff_skimmer", "skimmer");
// Station 2 glass
level thread station_2_control_room_glass();
// Play vignette
maps\nx_lava_anim::keene_standoff( level.keene, level.baker, level.redshirt, skimmer );
flag_set( "vignette_keene_standoff_done" );
level thread autosave_now();
skimmer vignette_vehicle_delete();
}
station_2_control_room_glass()
{
wait( 17.5 );
fx_origin = GetEnt( "station_2_depressurize_fx", "targetname" );
PlayFX( getfx( "station_2_depressurize_fx" ), fx_origin.origin );
glass_array = GetGlassArray( "station_2_control_room_glass" );
thread audio_station2_depressurize();
foreach( glass in glass_array )
{
DestroyGlass( glass );
}
}
audio_station2_depressurize()
{
level._player playsound("nx_lunar_depressurize");
wait 0.5;
thread maps\_utility::set_ambient( "nx_lunar_exterior_depress" );
level._player deactivatechannelvolumes( "snd_channelvolprio_pain", 5.5 );
wait 0.5;
level._player_helmet_loop = "amb_space_suit_amb";
}
station_2_keene_standoff_spawn()
{
spawner = GetEnt( "keene_control_room_breach", "targetname" );
spawner add_spawn_function( ::station_2_keene_standoff_spawn_func );
level.keene = spawner spawn_ai();
level.keene.animname = "keene";
spawner = GetEnt( "baker_control_room_breach", "targetname" );
spawner add_spawn_function( ::station_2_keene_standoff_spawn_func );
level.baker = spawner spawn_ai();
level.baker.animname = "baker";
spawner = GetEnt( "redshirt_control_room_breach", "targetname" );
spawner add_spawn_function( ::station_2_keene_standoff_spawn_func );
level.redshirt = spawner spawn_ai();
level.redshirt.animname = "redshirt";
}
station_2_keene_standoff_spawn_func()
{
self endon( "death" );
self maps\nx_lava_util::ally_protect();
self thread magic_bullet_shield();
}
//*******************************************************************
// *
// *
//*******************************************************************
bridge_to_train_VO()
{
flag_wait( "vignette_keene_standoff_done" );
//thread add_dialogue_line( "Keene", "Listen up! I know a way out of here but I don't got time to spell it out. You wanna keep breathin' long enough to finish this job?", "g" );
radio_dialogue( "lava_kee_bridge_listenup" );
wait( 1.0 );
//thread add_dialogue_line( "Keene", "Follow me! We have to get on that train passing below!", "g" );
radio_dialogue( "lava_kee_bridge_followme" );
wait( 1.0 );
//thread add_dialogue_line( "Baker", "You heard the man.", "w" );
radio_dialogue( "lava_bak_bridge_heardtheman" );
flag_wait( "vignette_bridge_to_train_jump" );
wait( 4.0 );
//thread add_dialogue_line( "Baker", "This is our ride, jump down!", "w" );
radio_dialogue( "lava_kee_bridge_jumpdown" );
}
//*******************************************************************
// *
// *
//*******************************************************************
bridge_to_train_start()
{
level._player TakeAllWeapons();
level._player GiveWeapon( "lunarrifle" );
level._player GiveWeapon( "spas12" );
level._player SwitchToWeapon( "lunarrifle" );
// Spawn the allies
maps\nx_lava_util::lava_ally_spawn( "bridge_to_train" );
// setup and teleport player
maps\nx_lava_util::player_start( "bridge_to_train_player_start" );
}
bridge_to_train()
{
level thread bridge_to_train_VO();
level thread bridge_to_train_ally_protect();
level.keene bridge_to_train_keene_thread();
level.baker bridge_to_train_baker_thread();
level thread bridge_to_train_skimmers();
level thread bridge_to_train_vignette();
level thread bridge_to_trian_explosions();
level thread bridge_to_train_player_kill();
// Init infinte tunnel
maps\nx_lava_train_interior::infinite_tunnel_init();
// Wait for transport train start trigger
trigger_wait( "lava_train_transport_trigger", "targetname" );
}
bridge_to_train_ally_protect()
{
level.keene maps\nx_lava_util::ally_protect();
level.baker maps\nx_lava_util::ally_protect();
}
bridge_to_train_vignette()
{
flag_wait( "vignette_bridge_to_train_jump" );
skimmer_01 = vignette_vehicle_spawn("bridge_to_train_skimmer_01", "skimmer_01");
skimmer_02 = vignette_vehicle_spawn("bridge_to_train_skimmer_02", "skimmer_02");
level.keene.animname = "keene";
level.baker.animname = "baker";
maps\nx_lava_anim::bridge_to_train_jump( level.keene, level.baker, skimmer_01, skimmer_02 );
level.keene stop_magic_bullet_shield();
level.baker stop_magic_bullet_shield();
level.keene delete();
level.baker delete();
}
bridge_to_train_player_kill()
{
while( 1 )
{
// Check distance from keene to player
if( Distance( level.keene.origin, level._player.origin ) > 1000 )
{
PlayFX( getfx( "bridge_to_train_explosion" ), level._player.origin );
Earthquake( 1, 1, level._player.origin, 100 );
SetDvar( "ui_deadquote", &"NX_LAVA_BRIDGE_TO_TRAIN_FAIL" );
level notify( "mission failed" );
maps\_utility::missionFailedWrapper();
level._player kill();
break;
}
if( flag( "vignette_bridge_to_train_jump" ) )
{
break;
}
wait( 0.05 );
}
}
bridge_to_train_skimmers()
{
// Wait for skimmer spawn
spawn_trigger = GetEnt( "spawn_bridge_to_train_skimmer", "targetname" );
spawn_trigger waittill( "trigger" );
skimmers = GetEntArray( spawn_trigger.target, "targetname" );
foreach( skimmer_spawner in skimmers )
{
skimmer = skimmer_spawner maps\_attack_heli::SAV_setup( "pathing_shooting" );
skimmer thread bridge_to_train_skimmers_spawn_func();
}
// Wait for skimmer spawn
spawn_trigger = GetEnt( "spawn_bridge_to_train_skimmer_2", "targetname" );
spawn_trigger waittill( "trigger" );
skimmers = GetEntArray( spawn_trigger.target, "targetname" );
foreach( skimmer_spawner in skimmers )
{
skimmer = skimmer_spawner maps\_attack_heli::SAV_setup( "pathing" );
skimmer thread bridge_to_train_skimmers_2_spawn_func();
}
}
bridge_to_trian_explosions()
{
explosion_points = GetEntArray( "bridge_to_train_explosion", "targetname" );
foreach( explosion_point in explosion_points )
{
explosion_point thread bridge_to_train_explosion_thread();
}
}
bridge_to_train_explosion_thread()
{
while( 1 )
{
if( Distance( self.origin, level._player.origin ) < self.radius )
{
// Do explosion
Earthquake( 0.3, 2, level._player.origin, 10000 );
playfx( getfx( "bridge_to_train_explosion" ), self.origin );
break;
}
wait( 0.05 );
}
}
bridge_to_train_skimmers_spawn_func()
{
self endon( "death" );
self Vehicle_SetSpeed( 18, 50, 50 );
self.baseaccuracy = 0.0;
flag_wait( "vignette_bridge_to_train_jump" );
wait( 10.0 );
self delete();
}
bridge_to_train_skimmers_2_spawn_func()
{
self endon( "death" );
self Vehicle_SetSpeed( 40, 50, 50 );
self.baseaccuracy = 0.0;
flag_wait( "vignette_bridge_to_train_jump" );
wait( 10.0 );
self delete();
}
bridge_to_train_keene_thread()
{
self disable_cqbwalk();
self set_force_color( "c" );
}
bridge_to_train_baker_thread()
{
self disable_cqbwalk();
self set_force_color( "b" );
}
//*******************************************************************
// *
// *
//*******************************************************************